从C#中的XPathSelectElement返回值

时间:2009-10-18 09:06:31

标签: c# xpath linq-to-xml

当选择不是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)
  10. 和预期的回报值

    1. 1个元素
    2. 2个元素
    3. 1个元素
    4. 0个元素
    5. 1个属性节点
    6. 2个元素和1个属性
    7. 2个文本节点
    8. 1个评论节点
    9. 整数2
    10. 如果Xpath没有返回IEnumerable of Elements(XPathSelectElements)或单个Element(XPathSelectElement)是否给出任何指示或失败是否为无声?

1 个答案:

答案 0 :(得分:2)

如果您通知一个有效的XPath表达式,其评估结果为XElements,那么您将获得:

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

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