我有一个没有一致结构的 XML。我需要看看是否有一种简单的方法来搜索所有父节点,这些父节点至少有一个属性为 modified="yes" 的子节点。有没有一种简单的方法可以用 XPath 做到这一点?我将要处理的 XML 非常庞大,我将使用一种 4GL 语言,它不具备 Visual Studio 的所有功能,但它确实提供了一些 COM 对象来帮助导航 XML DOM。该代码看起来与我在 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 节点本身具有此属性。