有没有办法在VBA中使用.getAttribute方法(或任何其他方法)来仅选择XMLDOMSelection对象中的唯一(非重复)属性?
换句话说,我有一个XML文档,其中包含以下内容:
<plants>
<plant color="green" height="7">Apple</plant>
<plant color="red" height="7">zztop</plant>
<plant color="red" height="8">42</plant>
</plants>
我想通过颜色抓住所有具有独特价值的植物。所以我想要另一个输出,这里有所有独特的颜色 - 绿色和红色。
实际上,我一直在使用递归循环来提取所有值(也是重复的)并通过另一个函数运行final以删除重复项。然而,问题在于它的计算成本太高。
请让我知道你的想法,谢谢。
答案 0 :(得分:1)
由于VBA仅支持XPath 1.0,因此您应该能够使用此XPath 1.0表达式:
/plants/plant[not(@color = following-sibling::plant/@color)]/@color
上面使用的谓词限制XPath仅返回相同color
的最后一次出现,以防它们有多个。请注意,在调用<plant>
之前,无需爬到当前..
节点的父节点(使用快捷方式following-sibling::plant
),因为这些<plant>
节点处于同一级别已经
答案 1 :(得分:0)
如果你正在使用XPath 2.0:
distinct-values(/plants/plant/@color)
和XPath 1.0:
/plants/plant[not(@color = ../following-sibling::plant/@color)]/@color