#java #xml #xpath #xquery
#java #xml #xpath #xquery
Вопрос:
У меня есть следующий Java
метод, который использует XQuery
:
public String getLocationByName(String name) {
final String nameToQueryFor = name;
return engine.new Query<String>(MY_COLLECTION) {
@Override
protected String query(Collection collection) throws Exception {
XQueryService service = queryService();
ResourceSet resourceSet = service.query(
format("//Products/Product[name='%s']"
"/attribute"
, StringEscapeUtils.escapeXml(nameToQueryFor)
));
List<String> results = newArrayList();
for (String resource : new IterableStringResources(resourceSet)) {
results.add(resource);
}
return results.get(0);
}
}.execute();
}
Как видно, в настоящее время я выполняю запросы только с использованием одного параметра, т.Е. name
.
Я новичок в XQuery, как я могу изменить этот Xquery, чтобы получить дополнительный параметр: price
Теперь мой метод станет:
public String getLocationByNameAndPrice(String name)
Комментарии:
1. Также обратите внимание, что это может быть безопаснее и проще в использовании exist-db.org/api/org/exist/xmldb /… чтобы настроить переменные для вашего запроса, чтобы затем вы могли использовать
//Products/Product[name=$name]
вместо форматирования и конкатенации строк.
Ответ №1:
Просто включите условие в свой XPath, например:
format("//Products/Product[name='%s' and price='%s']/attribute",
StringEscapeUtils.escapeXml(nameToQueryFor),
StringEscapeUtils.escapeXml(priceToQueryFor))
Точный синтаксис запроса, конечно, зависит от вашего XML-документа.