【问题标题】:Altova XMLSpy - Xpath "Unexpected 'atomic' item xs:string" error from tokenize() functionAltova XMLSpy - 来自 tokenize() 函数的 Xpath “Unexpected 'atomic' item xs:string”错误
【发布时间】:2020-03-16 15:16:47
【问题描述】:

我正在使用 Altova XMLSpy,但在使用 Xpath 2.0 的 Xpath tokenize() 函数时遇到问题。

我有一个包含此标记的 XML,其中包含我需要的值:

<REF TyCd="INVREF2">VVQFAR CIG ZA5180AAB6</REF>

这是我为检索所需值而创建的 Xpath:

if (index-of(tokenize(/InvoiceMsg/INVOICE/REFS/REF[@TyCd='INVREF2'], ' '), 'CIG') > 0)
then
    tokenize(/InvoiceMsg/INVOICE/REFS/REF[@TyCd='INVREF2'], ' ')[index-of(tokenize(/InvoiceMsg/INVOICE/REFS/REF[@TyCd='INVREF2'], ' '), 'CIG') + 1]
else
    ''

第三次使用tokenize()函数时出现错误,说:

意外的“原子”项目 xs:string 细节 XPTY0020:轴步骤中的上下文项必须是节点

此外,如果我使用固定字符串,像这样

tokenize(/InvoiceMsg/INVOICE/REFS/REF[@TyCd='INVREF2'], ' ')[index-of(tokenize('VVQFAR CIG ZA5180AAB6', ' '), 'CIG') + 1]

没有发生错误。

问题是:为什么错误只发生在那里(而不是在 if 语句中,例如),我该怎么办?

【问题讨论】:

    标签: xml xpath xpath-2.0 altova xmlspy


    【解决方案1】:

    tokenize() 返回一个字符串序列,因此在应用于 tokenize() 结果的谓词中,上下文项是一个字符串。当上下文项是字符串时,您不能使用路径表达式。您需要在外部绑定一个变量,并在谓词中使用它:[index-of(tokenize($root/InvoiceMsg/....)]

    更好的是,将变量绑定到 tokenize(/InvoiceMsg/INVOICE/REFS/REF[@TyCd='INVREF2'] 的结果,因为您多次使用该表达式。

    但是,这在没有“let”表达式的 XPath 2.0 中是有问题的。如果您有 XPath 3.0/3.1,您可以使用“let”绑定变量。如果没有,你只有“for”,它只允许你绑定一个单例:

    for $root in /
    return ..... [index-of(tokenize($root/InvoiceMsg/....)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多