2016-10-13 10 views
0

Я пытаюсь запросить значение для местоположения с атрибутом тегом в моем xml ниже. Как я могу это сделать?Как запросить XML внутри тега?

Мой текущий запрос возвращает только значение для полного атрибута тега, но я только хочу значение места, которое в данном случае является «sampleLocation»?

т.е: location="sampleLocation"

XML:

<Products> 
    <Product> 
     <name>Sample name</name> 
     <attribute id="sampleid" location="sampleLocation" type="sampleType"/> 
    </product> 
</Products> 

Текущий код:

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(); 
    } 

ответ

0

Я был в состоянии решить эту проблему с помощью следующего запроса:

"//Products/Product[name='%s']/attribute/@Location/string()" 

, который возвращает: "sampleLocation"

Примечание: без использования /string() в конце он давал ошибку:

attribute 'Location' has no parent element 
0

[Отредактировано для 'место' + коррекция]

"//Products/Product/name[text()=%s]/next-sibling::attribute/a‌​ttribute::location" 

Перевод: в контексте //Products/Product выберите элемент <name> с данным текстом. Затем возьмите следующий родственный элемент с <attribute> типа, из которого получают значение атрибута location (этого элемента)

Некоторые примеры «XPATH путей определения местоположения» straight from the horse's mouth.

+0

Будет ли это отбрасывать все значения атрибута, мне нужно только местоположение? – java123999

+0

@ java123999 Исправлено, чтобы выбрать только атрибут 'location' элемента элемента' '(черт возьми, этот звук будет фантастическим при чтении вслух). Дай мне знать, пожалуйста. –

+0

это не дает мне никаких результатов назад, можете ли вы проверить его правильно? или мне нужно использовать: next-sibling :: chapter [position() = 1] – java123999

0

Мое предложение

//Product[child::name/text()={$nameToQueryFor}]/attribute/@location 

Это будет работать только тогда, когда переменная связана со значением для данного типа элемента

+0

«Это будет работать, только когда переменная привязана к значению для типа элемента» - что это значит? – java123999

+0

Пожалуйста, см. Мой ответ, я смог получить решение для этого, спасибо – java123999