从 C# 中的 XPathSelectElement 返回值

发布于 2024-08-08 07:15:30 字数 1029 浏览 2 评论 0原文

当选择不是 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 放在下面 - 如果您不同意,请发表评论)

  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),则给出任何指示或者失败是沉默的?

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)

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

and expected return values

  1. 1 element
  2. 2 elements
  3. 1 element
  4. 0 elements
  5. 1 attribute node
  6. 2 elements and 1 attribute
  7. 2 text nodes
  8. 1 comment node
  9. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝色星空 2024-08-15 07:15:30

如果您通知计算结果为 XElements 的有效 XPath 表达式,您将得到:

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

如果您尝试发送与 XElement 不同的节点类型匹配的 XPath,您将收到 InvalidOperationException代码>;如果您不确定 XPath 返回并希望避免捕获异常,可以使用 node.XPathEvaluate()

If you inform a valid XPath expression which evaluates to XElements, you'll get:

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

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 with node.XPathEvaluate()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文