Sebastian
Sebastian

Reputation: 33

Using XPath to access comments a flat hierachy

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

Upvotes: 3

Views: 659

Answers (2)

Dimitre Novatchev
Dimitre Novatchev

Reputation: 243599

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.

Upvotes: 0

Mads Hansen
Mads Hansen

Reputation: 66796

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']]

Upvotes: 1

Related Questions