Использование XPath для доступа к комментариям плоский иераши

StackOverflow https://stackoverflow.com/questions/2636192

Вопрос

У меня есть данный документ XML (структура не может быть изменена) и хочу получить комментарии, которые написаны выше узлов. Документ выглядит так:

<!--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>

Таким образом, комментарии являются необязательными, но если есть один, я хочу получить комментарий над каждым атрибутом. С использованием /*/comment()[n] даст мне комментарий n, но для n = 2 я бы естественно получил комментарий третьего атрибута, поэтому нет связи между атрибутами и комментариями любых идей? Спасибо

Это было полезно?

Решение

Использовать:

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

Это более компактно и точно, чем выбранный в данный момент ответ. Отказ То // Аббревиатура необходима, поскольку не был предоставлен безработный XML-документ, а уровень вложенности узлов комментариев не известен.

Другие советы

Если вы хотите выбрать комментарии, сопровождаемые attribute Элемент, то это должно работать:

/*/comment()[following-sibling::*[position()=1 and name()='attribute']]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top