【问题标题】:Comparison of Two XPath Values Even When One Does Not Exist比较两个 XPath 值,即使一个不存在
【发布时间】:2015-01-22 18:35:38
【问题描述】:

我正在寻找一种方法来比较来自两个不同 XML 的两个 XPath(1.0 版)值,即使其中一个值不存在。

其中一个生成的 XML 总是返回一个带有值或空标记的 XML 元素,即

<Product>
    <Name>ProdName</Name>
    <Id>3388</Id>
</Product>

<Product>
    <Name/>
    <Id>3388</Id>
</Product>

然而,另一个生成的 XML 文档,当一个元素没有值时,它根本不提供它,即(如果有 ProductName 的值,我可能会像下面这样收到它),

<ProductDetail>
    <ProductName>ProdName</ProductName>
    <ProductPrice>4820.99</ProductPrice>
    ...
</ProductDetail>

ProductName没有值时接收,

<ProductDetail>
    <ProductPrice>4820.99</ProductPrice>
    ...
</ProductDetail>

在节点存在的情况下,比较直接,

//interested_node/Product/Name/text()

//interested_node/ProductDetail/ProductName/text()

有没有办法拥有两个 XPath 表达式,一个从第一个 XML 文档中获取 node 的值并将其与第二个 XML 文档中的 node 值进行比较,即使在第二个 XML 文档中没有这样的节点的情况下表达?如果满足条件,是否有任何 XPath 1.0 函数返回一个值,否则返回另一个值(如 Oracle 的 decode())?

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    我通过以下 XPath 1.0 技巧解决了这个问题:

    concat
    (
        substring(
            //interested_node/ProductDetail/ProductName/text(),
            1,
            number(exists(//interested_node/ProductDetail/ProductName/text())) *
            string-length(//interested_node/ProductDetail/ProductName/text())
        ), ''
    )
    

    然后将其与//interested_node/Product/Name/text()进行比较

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 2011-05-22
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多