質問
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を使用します
所属していません StackOverflow