Как запросить 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();
}
3 ответа
Я смог решить эту проблему, используя следующий запрос:
"//Products/Product[name='%s']/attribute/@Location/string()"
который возвращает: "sampleLocation"
Примечание: без использования /string()
в конце это дало ошибку:
attribute 'Location' has no parent element
Мое предложение
//Product[child::name/text()={$nameToQueryFor}]/attribute/@location
Это будет работать только тогда, когда переменная связана со значением для типа элемента
[Отредактировано для "местоположения" + коррекция]
"//Products/Product/name[text()=%s]/next-sibling::attribute/attribute::location"
Перевод: в контексте //Products/Product
выберите элемент <name>
с заданным текстом. Затем возьмите следующий элемент родного брата с <attribute>
тип, из которого получают значение location
атрибут (этого элемента)
Некоторые примеры "путей локации xpath" прямо изо рта лошади.