C# - 使用其属性获取xml元素的值

时间:2016-05-01 09:08:39

标签: c# xml

我正在尝试使用XML属性条件获取元素的值。基本上我只想要整个文档中的一个值,我一直在尝试直接查询它。这是我的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<list version="1.0">
   <meta>
      <type>resource-list</type>
   </meta>
   <resources start="0" count="1">
      <resource classname="Quote">
         <field name="name">Microsoft Corporation</field> <!-- I want this!!! -->
         <field name="price">49.869999</field>
         <field name="symbol">MSFT</field>
         <field name="ts">1461960000</field>
         <field name="type">equity</field>
         <field name="utctime">2016-04-29T20:00:00+0000</field>
         <field name="volume">48411684</field>
      </resource>
   </resources>
</list>

特别是,我希望字段中包含“name”属性。这就是我为检索这个而做的:

            XDocument xDoc = XDocument.Parse(httpResponseBody);
            string name = (string)xDoc.Elements("field").First(x => x.Attribute("name").Value == "name");

我收到“元素不匹配序列”错误。当我尝试对此进行实验或更改任何内容时,我会得到一个未设置为引用错误的对象。

我觉得我在这里做了一个简单的解析错误,但是任何帮助都会受到赞赏(以及我出错的地方以及我将来可以做些什么以防止这种情况发生!)

感谢 - 你!

1 个答案:

答案 0 :(得分:2)

Elements查询仅查找当前节点的直接子项。即Elements只返回根list元素。

这意味着您需要查询:

doc.Elements("list").Elements("resources").Elements(...

或者你可以使用Descendants,这将是当前节点的许多后代,所以:

var name = (string)doc.Descendants("field")
    .First(x => (string)x.Attribute("name") == "name");