Использование нескольких параметров в XQuery?

#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-документа.