我正在寻找一种比较来自两个不同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()
)?
答案 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()