Question

J'ai un problème XML avec lequel je ne parviens pas à traiter avec XPath. Je n'arrive pas à obtenir les valeurs que je recherche. Le XML est structuré comme suit:

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

Étant donné le nom du menu, je souhaite récupérer une liste de DocumentNodes dans le menu. Par exemple, étant donné & "Sous-menu &", Je voudrais récupérer les deux nœuds de document pour Manual.pdf et UserGuide.pdf.

Actuellement, je tire ces informations en utilisant un code qui parcourt les enfants, mais je préfère les récupérer directement avec XPath, mais mes compétences avec cela sont faibles.

(Et avant que vous ne demandiez, je ne peux pas restructurer le XML. Il m'est fourni de cette façon.)

Avez-vous des idées?

Était-ce utile?

La solution

Voici un XPath qui fera ce que vous voulez:

  

//Menu[Name='Sub Menu']/Document

Autres conseils

/<Menu>[\w\n]*<Name>Sub Menu</Name>[\w\n]*<Document>[\w\n]*(<DocName>([a-ZA-Z0-9\.]+)</DocName>[\w\n]*)*</Menu>/

Cela fonctionnerait plus que probablement (avec un peu de peaufinage, c'est un peu dur!), mais, je ne pense pas que Regex soit la voie à suivre. J'utiliserais personnellement XPath ou DOM

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top