【问题标题】:VBScript and Xpath excluding duplicatesVBScript 和 Xpath 不包括重复项
【发布时间】:2012-09-28 15:58:47
【问题描述】:

我正在尝试使用 vbscript 从 XML 文档中提取名称。

XML 文档结构

<Aliases>
    <Alias PartyType="DF" CaseID="000000" NameType=""> Name Name</Alias>
    <Alias PartyType="DF" CaseID="000000" NameType=""> Name Name</Alias>
    <Alias PartyType="DF" CaseID="000000" NameType=""> Name Name</Alias>
    ...
</Aliases>

XML 文件可能有 100 行来自多个不同 CaseID 的具有相同名称的行,因为对于我的 vbscript 的这一部分,我试图从所有案例中提取所有 不同 名称,但这里是问题,我不想返回重复项。

有没有办法使用 xPath 表达式执行此操作,或者我应该尝试使用 VBScript 执行此操作?

更新日期

使用下面的答案,我现在收到以下错误

msxml3.dll: 预期令牌 ')' 找到 ':'。

别名/别名[@PartyType='DF' and not(./text() = previous-sibling-->:

我试过了

Aliases/Alias[@PartyType='DF' and not(./text() = preceding::/*text())]

认为应用程序可能正在使用 MSXML.net 而不是 MSXML3 它仍然给了我同样的错误。

???

【问题讨论】:

  • 您将其表述为 要么 VBScript 或 Xpath,但我希望您在 VBScript 中使用 MSXML 解析器,不是吗?
  • 我不确定,我会这么认为。我正在编写 vb 脚本以从 XML 中提取数据以将其插入到程序中的表单中。使用用 C# 编写的 dll 从 SQL Server 数据库中提取数据,将其插入到应用程序用于存储信息的 XML 中,然后应用程序运行我正在编写的 VBScript 以提取注入的信息。我对大约 3-4 个月前刚开始的​​应用程序还是很陌生。
  • 您不确定?请向我们展示您已经读取数据的相关代码sn-p。
  • 我正在标记 FKDev 的答案,因为我相信它会通过 Xpath 查询完成我需要它做的事情。由于周末的原因,我无法在我正在处理的项目中对此进行测试,并且因为我遇到了与该问题无关的项目其他部分的问题。但我几乎可以肯定 FKDev 已经给出了我正在寻找的关于这个问题的答案。
  • 应用程序确实使用了 MSXML。

标签: xml xpath vbscript msxml3


【解决方案1】:

可能是这样的

/Aliases/Alias[not(./text() = preceding-sibling::*/text())]

(我没试过,但应该可以)

【讨论】:

  • 这仅适用于它之前的元素还是它之前的所有元素?这有意义吗?
  • 应该是following-sibling?这样我就可以从顶部开始向下工作,但是如果它们与先前的元素匹配,我将不得不想办法跳过它们
  • preceding-sibling 将为您提供同一级别的所有前面的元素。
  • 好的!我现在看到了。 TGIF 我想我今天只有Code Eye!当我写完代码后,我会测试它,看看它是否适合我。我想它会的! +1
  • 应该是/Aliases/Alias[(./text() != preceding-sibling::*/text())] 吗?
猜你喜欢
  • 2015-10-04
  • 2012-06-02
  • 1970-01-01
  • 2016-10-22
  • 2018-02-24
  • 2012-04-27
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多