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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top