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节点集下面 - 请评论,如果您不同意)
//a
//b
//b[1]
//c
//@c
//b | //@c
//e/text()
//comment()
count(//b)
和预期的返回值
- 1元件
- 2元件
- 1元件
- 0元件
- 1属性节点
- 2个元素和1个属性
- 2文本节点
- 1注释节点
- 整数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()