Дано:XPath для конкатенации родительских и атрибутов ребенка значения в одном запросе
<?xml version="1.0" encoding="UTF-8"?>
<root>
<report Id="0" >
<property name="comments">comment</property>
<property name="test">sdcs</property>
<property name="test">csd</property>
<property name="eventHandlerClass">sdcs</property>
</report>
<report Id="1">
<property name="comments">comment</property>
<property name="test">dcs</property>
<property name="test">gds</property>
<property name="test">jds</property>
<property name="eventHandlerClass">sdcs</property>
</report>
</root>
Ожидаемая мощность:
Id=0, test=sdcs
Id=0, test=csd
Id=1, test=dcs
Id=1, test=gds
Id=1, test=jds
только ищет простой Xpath 1,0 для достижения этой цели. Пробовал функции и предикаты varioud, но не смог получить выход, как указано выше. По существу, после прочтения я должен быть в состоянии определить, к какому «тесту» принадлежит идентификатор отчета.
Пробовал:
/root/report/@Id | /root/report/property[@name="test"]
- Но дает результат в отдельных строках
/root/report/ (@Id | property[@name="test"])
- Но дает результат в отдельных строках
concat(/root/report/@Id, /root/report/property[@name="test"])
- дает ошибку (думаю Concat работает на результат одной линии)
string-join(/root/report/@Id | /root/report/property[@name="test"] , ',')
- Все идет как одна строка, даже два идентификатора отчета.
То есть именно то, что мне нужно! Но, к сожалению, недоступно в XPath 1.0! –
Я не думаю, что это возможно в XPath 1, так как вы можете выбрать каждый узел только один раз и значения только в конце. Если не существует жесткого ограничения на размер (например, только два узла отчета) (и ваш второй пример - XPath 2, а не 1, не так ли?) – BeniBela
Да, это XPath 2. Я пытался использовать разные варианты без проверки в реальной системе. С вашим решением поняли, что у меня есть ограничение на использование XPath 1.0. –