使用LINQ to XML获取特定的后代节点值

时间:2018-01-11 16:18:48

标签: c# xml linq-to-xml

我有一个XML文档,我试图用LINQ to XML查询。 XML是..

<status>

我正在尝试读取节点<status的值以确定API调用是否成功。我无法将获取XDocument xml = XDocument.Parse(xmlResponse); string returnValue = = xml.Descendants("result/status").Select(x => x.Name).ToString(); 节点值所需的LINQ语法放在一起。我以为我可以使用XPath语法来获取值。

{{1}}

但是,我收到以下错误..

  

&#39; /&#39;字符,十六进制值0x2F,不能包含在名称中。

2 个答案:

答案 0 :(得分:2)

试试这段代码:

XDocument xdoc = XDocument.Parse(@"
<response>
  <operation>
    <authentication>
      <username>redacted</username>
      <isauthenticated>true</isauthenticated>
    </authentication>
    <result>
      <status>success</status>
    </result>
  </operation>
</response>

");

Boolean isSuccess;
String s = xdoc.Element("response").Element("operation").Element("result").Element("status").Value;

isSuccess = s == "success";

获取status元素的值并检查它是否等于特定值;在这种情况下,isSuccess将为true

答案 1 :(得分:1)

LINQ-to-XML方法Elements()Descendants()仅处理单个名称,而不处理类似xpath的路径。如果要提供xpath表达式,请使用xpath扩展名。

// using System.Xml.Linq;
var status = (string)xml.XPathSelectElement("//result/status");

否则,您需要使用正确的方法构建等效查询。

var status = (string)xml.Descendants("result").Elements("status").FirstOrDefault();