从 C# 中的 XPathSelectElement 返回值
当选择不是 NodeSet 或包含非元素的 NodeSet 时,node.XPathSelectElement()
和 node.XPathSelectElements()
如何表现?例如,它们总是返回某些内容还是可以抛出异常?返回值可以为 null 还是它始终是某种 IEnumerable?搜索的 XML 是恒定的:
<a>
<b c="d"/>
<e>fgh</e>
<e>xyz</e>
<!-- comment -->
<b/>
</a>
为了说明这一点,这里有一些 XPath 字符串;我将感谢 XPathSelectElement 和 XPathSelectElements 在每种情况下的行为(我已将预期的 XSLT NodeSet 放在下面 - 如果您不同意,请发表评论)
//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),则给出任何指示或者失败是沉默的?
How do node.XPathSelectElement()
and node.XPathSelectElements()
behave when the selection is either not a NodeSet or a NodeSet containing non-Elements? For example do they always return something or can they throw Exceptions? can the return value be null or is it always an IEnumerable of some sort? The XML searched is constant:
<a>
<b c="d"/>
<e>fgh</e>
<e>xyz</e>
<!-- comment -->
<b/>
</a>
To illustrate this here are some XPath strings; I would be grateful for the behaviour of both XPathSelectElement and XPathSelectElements in each case (I have put the expected XSLT NodeSet below - please comment if you disagree)
//a
//b
//b[1]
//c
//@c
//b | //@c
//e/text()
//comment()
count(//b)
and expected return values
- 1 element
- 2 elements
- 1 element
- 0 elements
- 1 attribute node
- 2 elements and 1 attribute
- 2 text nodes
- 1 comment node
- the integer 2
If the Xpath does not return an IEnumerable of Elements (XPathSelectElements) or a single Element (XPathSelectElement) is any indication given or is the failure silent?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您通知计算结果为
XElements
的有效 XPath 表达式,您将得到:如果您尝试发送与 XElement 不同的节点类型匹配的 XPath,您将收到
InvalidOperationException
代码>;如果您不确定 XPath 返回并希望避免捕获异常,可以使用node.XPathEvaluate()
If you inform a valid XPath expression which evaluates to
XElements
, you'll get:If you try to send a XPath matching a node type different than XElement, you'll get an
InvalidOperationException
; If you're not sure about XPath return and want to avoid catching Exceptions, you can go withnode.XPathEvaluate()