У меня есть следующий XML:XQuery возвращает «false», когда false не является полем в XML?
<personDetails>
<person>
<name>Mr Test</name>
<paid>Yes</paid>
<details>
<detail>
<id>12345</id>
<address>15 Sample Street</address>
</detail>
</details>
</person>
</personDetails>
Я пытаюсь возвращения значения для paid
, когда дается определенное имя и идентификатор. Возвращаемое значение - «false
», что неверно и даже не в моем XML.
Является ли мой текущий запрос/метод java правильным?
Текущий запрос:
//personDetails/person[name='Mr Test'] and //personDetails/person/details/detail[id ='S0335171']/paid/text()
Текущий метод:
public String getPaidByNameAndId(String name, String id) {
final String _Name = name;
final String _id = id;
return engine.new Query<String>(PERSON_COLLECTION) {
@Override
protected String query(Collection collection) throws Exception {
XQueryService service = queryService();
ResourceSet resourceSet = service.query(
format("//personDetails/person[name='%s'] and //personDetails/person/details/detail[id ='%s']" +
"/paid/text()"
, StringEscapeUtils.escapeXml(_Name),
StringEscapeUtils.escapeXml(_id)
));
for (String resource : new IterableStringResources(resourceSet)) {
results.add(resource);
}
return results.get(0);
}
}.execute();
}
Для справки, xQueryService я использую:
org.exist.xmldb.XQueryService;
Вы действительно не должны быть построения запроса с помощью конкатенации: вы оставляете себя широко открыты для атак путем внедрения (или просто ошибки). Объявите внешние переменные в вашем запросе и привяжите значения к ним из Java API. –