比较两个 XPath 值,即使一个值不存在

Comparison of Two XPath Values Even When One Does Not Exist

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

生成的 XML 中的一个总是 return 一个带有值或空标签的 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 文档中获取节点值,并将其与第二个 XML 文档中的节点值进行比较,即使在第二个表达式中没有这样的节点的情况?是否有任何 XPath 1.0 函数在满足条件时 return 是一个值,否则是另一个值(如 Oracle 的 decode())?

我通过以下 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()

进行比较