Given:
<?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>
Expected output:
Id=0, test=sdcs
Id=0, test=csd
Id=1, test=dcs
Id=1, test=gds
Id=1, test=jds
Only looking for a plain Xpath 1.0 to achieve this. Tried varioud functions and predicates but fail to get an output like above. Essentially, after reading I should be able to tell which "test" belongs to which report Id.
Tried:
/root/report/@Id | /root/report/property[@name="test"]
-- But gives result in separate lines
/root/report/ ( @Id | property[@name="test"])
-- But gives result in separate lines
concat( /root/report/@Id, /root/report/property[@name="test"])
-- Gives error (think Concat works on single line result)
string-join(/root/report/@Id | /root/report/property[@name="test"] , ',')
-- All comes as a single line, even two report Ids.
You can use for for that to keep the id in a variable:
for $report in /root/report
return for $property in $report/property[@name="test"]
return concat("Id=", $report/@Id, ", ", $property/@name, "=", $property)
Or shorter:
for $report in /root/report return
$report/property[@name="test"]/
concat("Id=", $report/@Id, ", ", @name, "=", .)