質問

XPathでの処理に問題があるXMLがあります。探している値を取得できないようです。 XMLは次のように構成されています。

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

メニュー名を指定すると、メニュー内のDocumentNodeのリストを取得できます。たとえば、<!> quot; Sub Menu <!> quot;が与えられた場合、Manual.pdfおよびUserGuide.pdfの2つのDocumentノードを取得したいです。

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

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

何か考えはありますか

役に立ちましたか?

解決

これは、必要なことを行うXPathです。

  

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

他のヒント

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

おそらく動作するでしょう(少し調整して、これは少し荒いです!)が、Regexが進むべき道ではないと思います。個人的にXPathまたはDOMを使用します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top