Question

I have a given XML document (structure can not be changed) and want to get the comments that are written above the nodes. The document looks like this:

<!--Some comment here-->    
    <attribute name="Title">Book A</attribute>
    <attribute name="Author">
       <value>Joe Doe</value>
       <value>John Miller</value>
    </attribute>
<!--Some comment here-->
    <attribute name="Code">1</attribute>

So comments are optional, but if there is one, I want to get the comment above each attribute. Using /*/comment()[n] would give me comment n, but for n=2 I would naturally get the comment of the third attribute, so there is no connection between attributes and comments Any ideas? Thanks

Was it helpful?

Solution

Use:

//comment()[following-sibling::*[1][self::attribute]]

This is more compact and precise than the currently selected answer. The // abbreviation is necessary, since no wellformed XML document was provided and the nesting level of the comment nodes is not known.

OTHER TIPS

If you want to select the comments that are followed by an attribute element, then this should work:

/*/comment()[following-sibling::*[position()=1 and name()='attribute']]
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top