2009-03-04 10 views
0

J'ai du XML J'ai du mal à traiter avec XPath. Je n'arrive pas à obtenir les valeurs que je recherche. Le XML est structuré comme suit:XPath pour trouver des valeurs imbriquées

<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 veux revenir une liste de DocumentNodes dans le menu. Par exemple, étant donné «Sous-menu», j'aimerais récupérer les deux nœuds Document pour Manual.pdf et UserGuide.pdf.

Actuellement, je tire cette information en utilisant du code qui passe à travers les enfants, mais, je préfère le tirer directement en utilisant XPath, mais mes compétences sont faibles.

(Et avant de vous demander, je ne peux pas restructurer le XML. Il est fourni à moi de cette façon.)

Toute pensée?

+0

Quelle langue utilisez-vous? Il doit y avoir un analyseur écrit dans/pour cette langue afin que vous ne deviez pas compter sur RegEx –

+0

Vous avez raison. Je veux dire XPath. PET de cerveau! –

Répondre

9

Voici un XPath qui fera ce que vous voulez:

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

0

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

Est-ce que plus de travail susceptible (avec un peu de peaufinage, c'est un peu rude!), mais je ne pense pas que Regex soit la voie à suivre. J'utiliserais personnellement XPath ou DOM

Questions connexes