2009-03-04 18 views
0

XMLがあります。XPathで処理するのに問題があります。私が探している価値を得ることができない。 XMLは次のように構成されています。ネストされた値を見つけるXPath

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

メニュー名を指定すると、メニューのDocumentNodesのリストを取得します。たとえば、「Sub Menu」を指定すると、Manual.pdfとUserGuide.pdfの2つのDocumentノードを取得したいと考えています。

現在のところ、私はこの情報を子供をループするコードを使用して取得していますが、XPathを使用して直接的にプルするのですが、そのスキルは弱いです。

(そして、あなたが尋ねる前に、私はXMLを再構築することはできません。それは私にはこの方法を提供しています。)

任意の考え?ここで

+0

どのような言語を使用していますか? RegEx –

+0

に頼る必要がないように、その言語で書かれたパーサが必要です。 XPathと言っています。脳のおなら! –

答えて

9

は、あなたがやりたいだろうXPathのです。

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

は少し微調整して、これは少し荒れている(可能性が高い仕事よります! )、しかし、私は正規表現が行く方法だとは思わない。私は個人的にXPathまたはDOMを使用します

関連する問題