如何使用XElement.Parse然后找到特定元素的值?

时间:2012-11-07 21:43:41

标签: c# .net xml linq linq-to-xml

我有一些从REST调用返回的XML,如下所示:

<ArrayOfProperty xmlns=\"http://schemas.microsoft.com/HPCS2008R2/common\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">
  <Property>
    <Name>Id</Name>
    <Value>17</Value>
  </Property>
  <Property>
    <Name>StartTime</Name>
    <Value>11/7/2012 9:13:50 PM</Value>
  </Property>
  <Property>
    <Name>State</Name>
    <Value>Failed</Value>
  </Property>

我正在使用RestSharp API来帮助执行API调用并尝试使用linq-to-xml XElement.Parse来解析结果。我不确定如何获得状态的值,以便从本文档中我想做的事情:

XElement.Parse(XMLstring).Elements???从包含元素State的元素集中获取文本“Failed”,但我希望<Value>Failed</Value>元素中的文本“失败”。该值元素可以有多个值,但我总是想要与状态相关联的值。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的XML包含默认命名空间,因此您需要定义它并在查询中使用。

XNamespace ns = "http://schemas.microsoft.com/HPCS2008R2/common";

var value = (string)XDocument.Parse(input)
    .Descendants(ns + "Property")
    .Where(p => (string)p.Element(ns + "Name") == "State")
    .Elements(ns + "Value").FirstOrDefault();