一貫した構造を持たないXMLがあります。属性modified="yes"を持つ子ノードが少なくとも1つあるすべての親ノードを検索する簡単な方法があるかどうかを確認する必要があります。XPathでこれを行う簡単な方法はありますか?私が扱うXMLはかなり巨大で、Visual Studioのすべての機能を備えていない4GL言語で作業しますが、XMLDOMのナビゲートに役立ついくつかのCOMオブジェクトを提供します。コードは、Visual Studioで行うものと非常によく似ています(サンプルxmlの下を参照)
サンプルXML(読みやすくするために大幅に簡略化):
<RootNode>
<BOOK>
<PRICE modified="yes">15</PRICE>
<COPIES>10</COPIES>
</BOOK>
<MAGAZINE>
<PRICE>8</PRICE>
<COPIES modified="yes">100</COPIES>
</MAGAZINE>
<NEWSPAPER modified="yes">
<PRICE>2</PRICE>
<COPIES>75</COPIES>
</NEWSPAPER>
<KINDLE_SUB>
<PRICE modified="yes">6</PRICE>
<COPIES/>
</KINDLE_SUB>
<EMAIL_SUB>
<UNSUBSCRIBE modified="yes">1</UNSUBSCRIBE>
</EMAIL_SUB>
</RootNode>
Visual Studioでは、次のことを行うことができます。
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml( [above xml] );
XmlNodeList nodelist = xmldoc.SelectNodes(" *XPATH HERE* ");
うまくいけば、XmlNodeListオブジェクトのBOOK、MAGAZINE、KINDLE_SUB、およびEMAIL_SUBノードに戻るはずです。
NEWSPAPERノード自体にこの属性がある場合でも、modified = "yes"の属性を持つ子ノードがないため、NEWSPAPERノードは選択しないでください。