Usando XPath para acessar comentários uma hierachy plana
-
26-09-2019 - |
Pergunta
Eu tenho um determinado documento XML (a estrutura não pode ser alterada) e deseja obter os comentários escritos acima dos nós. O documento se parece com o seguinte:
<!--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>
Portanto, os comentários são opcionais, mas se houver um, quero obter o comentário acima de cada atributo. Usando /*/comment()[n]
Daria -me comentar n, mas para n = 2 eu naturalmente receberia o comentário do terceiro atributo, para que não haja conexão entre atributos e comentários alguma idéia? Obrigado
Solução
Usar:
//comment()[following-sibling::*[1][self::attribute]]
Isso é mais compacto e preciso do que a resposta atualmente selecionada. o //
A abreviação é necessária, uma vez que nenhum documento XML bem formado foi fornecido e o nível de nidificação dos nós de comentários não é conhecido.
Outras dicas
Se você deseja selecionar os comentários que são seguidos por um attribute
Elemento, então isso deve funcionar:
/*/comment()[following-sibling::*[position()=1 and name()='attribute']]