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

时间:2015-01-22 18:35:39

标签: xml xpath

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

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

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

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

然而,另一个生成的XML文档,当没有元素的值时,它根本不提供它,即(如果有ProductName的值,我可能会收到它,如下所示)< / p>

<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&#39; s decode())?

1 个答案:

答案 0 :(得分:0)

我使用以下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()

进行比较