我正在尝试使用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");
我收到“元素不匹配序列”错误。当我尝试对此进行实验或更改任何内容时,我会得到一个未设置为引用错误的对象。
我觉得我在这里做了一个简单的解析错误,但是任何帮助都会受到赞赏(以及我出错的地方以及我将来可以做些什么以防止这种情况发生!)
感谢 - 你!
答案 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");