C#中XPathSelectElement的返回值

问题描述:

当选择不是包含非元素的NodeSet或NodeSet时,node.XPathSelectElement()node.XPathSelectElements()如何表现?例如,他们总是返回一些东西,或者他们可以抛出异常?返回值可以为null,或者它总是某种类型的IEnumerable?搜索的XML是恒定的:C#中XPathSelectElement的返回值

<a> 
    <b c="d"/> 
    <e>fgh</e> 
    <e>xyz</e> 
<!-- comment --> 
    <b/> 
</a> 

为了说明这一点,这里是一些XPath字符串;我将是既XPathSelectElement并且在每种情况下XPathSelectElements的行为感激(我已经把预期XSLT节点集下面 - 请评论,如果您不同意)

  1. //a
  2. //b
  3. //b[1]
  4. //c
  5. //@c
  6. //b | //@c
  7. //e/text()
  8. //comment()
  9. count(//b)

和预期的返回值

  1. 1元件
  2. 2元件
  3. 1元件
  4. 0元件
  5. 1属性节点
  6. 2个元素和1个属性
  7. 2文本节点
  8. 1注释节点
  9. 整数2

如果XPath不返回元素的IEnumerable(XPathSelectElements )或单个元素(XPathSelectElement)是否有任何指示,或者是失败的沉默?

如果你告诉一个有效的XPath表达式计算结果为XElements,你会得到:

 Linq.XPathSelectElement   Linq.XPathSelectElements 
     DOM.SelectSingleNode    DOM.SelectNodes 
     -----------------------   ------------------------ 
"//c"    null       .Count == 0 
"//a"   XElement      .Count == 1 

如果您尝试发送的XPath匹配比的XElement不同节点类型,你会得到一个InvalidOperationException;如果您不确定XPath返回并希望避免捕获异常,则可以使用node.XPathEvaluate()