XPath para encontrar valores aninhados
Pergunta
Eu tenho alguns XML Eu estou tendo problemas com processamento de XPath. Eu não consigo obter os valores que eu estou procurando. O XML é estruturado como este:
<Group>
<Menu>
<Name>Top Menu</Name>
<Document>
<DocName>Readme.txt</DocName>
</Document>
<Menu>
<Name>Sub Menu</Name>
<Document>
<DocName>Manual.pdf</DocName>
</Document>
<Document>
<DocName>UserGuide.pdf</DocName>
</Document>
</Menu>
</Menu>
</Group>
Dado o nome do menu, eu quero voltar uma lista de DocumentNodes no menu. Por exemplo, dado "Sub Menu", eu gostaria de receber de volta os dois nós de Documentos para a Manual.pdf e UserGuide.pdf.
Atualmente, eu estou puxando essas informações usando código que percorre as crianças, mas, eu prefiro apenas puxe-o directamente utilizando XPath, mas minhas habilidades com ele são fracos.
(E antes que você pergunte, eu não posso reestruturar o XML. É fornecido para mim desta maneira.)
Qualquer pensamento?
Solução
Aqui está um XPath que vai fazer o que quiser:
//Menu[Name='Sub Menu']/Document
Outras dicas
/<Menu>[\w\n]*<Name>Sub Menu</Name>[\w\n]*<Document>[\w\n]*(<DocName>([a-ZA-Z0-9\.]+)</DocName>[\w\n]*)*</Menu>/
seria mais provável de trabalho (com um pouco de ajustes, isso é um pouco áspero!), Mas, eu não acho que Regex é o caminho a percorrer. Eu usaria pessoalmente XPath ou DOM