I have a given XML document (structure can not be changed) and want to get th开发者_如何学编程e 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
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']]
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.
精彩评论