VBA从XML树中获取唯一属性

时间:2015-07-17 20:52:47

标签: xml vba xpath msxml

有没有办法在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以删除重复项。然而,问题在于它的计算成本太高。

请让我知道你的想法,谢谢。

2 个答案:

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