什么是Coalesce运算符的XPath等价物?

时间:2012-01-25 19:20:50

标签: xpath

我有以下路径:

  • /我:公司/ NS1:审计/ NS1:访问/ NS1:customField10
  • /我:公司/ NS1:审计/ NS1:访问/ NS1:使用accountNumber

我想选择ns1:customField10,如果它不为空,否则我想返回ns1:accountNumber。

我尝试了以下内容:

xml.SelectSingleNode(
    "(/my:cobius/ns1:Audit/ns1:Visit/ns1:customField10 | 
    /my:cobius/ns1:Audit/ns1:Visit/ns1:accountNumber)", ns)

但它始终返回accountNumber。我尝试翻转customField10和accountNumber的顺序,但没有快乐。它仍然返回accountNumber。

如何在XPath中执行等效的coalesce运算符?

更新

这是最终的代码:

xml.SelectSingleNode(
    "(/my:company/ns1:Audit/ns1:Visit/ns1:customField10[normalize-space()] | 
    /my:company/ns1:Audit/ns1:Visit/ns1:accountNumber[not(normalize-space(../ns1:customField10))])", ns)

1 个答案:

答案 0 :(得分:5)

如果节点丢失,您的代码将起作用(类似于SQL中的NULL)。但是不会丢失空(就像SQL中的空字符串一样)。

您当然可以添加谓词:

/my:cobius/ns1:Audit/ns1:Visit/ns1:customField10[string-length(.)] | /my:cobius/ns1:Audit/ns1:Visit/ns1:accountNumber