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

C#-获取xml元素及其属性的值,c#,xml,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">

我试图使用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>
我得到一个“元素不匹配序列”错误。当我尝试使用这个或更改任何内容时,我得到一个对象未设置为引用错误

我感觉到我在这里犯了一个简单的解析错误,但是如果有任何帮助,我都将不胜感激(以及我在哪里出了错,我可以做些什么来防止将来出现这种情况!)


谢谢大家!

Elements查询只查找当前节点的直接子节点。i、 e.
元素
将只返回根
列表
元素

这意味着您需要进行如下查询:

doc.Elements("list").Elements("resources").Elements(...
或者,您可以使用
子体
,这将创建当前节点的多个子体,因此:

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

Elements
查询仅查找当前节点的直接子节点。i、 e.
元素
将只返回根
列表
元素

这意味着您需要进行如下查询:

doc.Elements("list").Elements("resources").Elements(...
或者,您可以使用
子体
,这将创建当前节点的多个子体,因此:

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

string name=xDoc.SelectSingleNode(//field[@name='name'])。InnerText
使用
子体(“field”)
而不是
元素(“field”)
@MathiasR.Jessen最好使用LINQ,但如果必须使用XPath,则需要
xDoc.XPathSelectElement(…)
。在
XDocument
@CharlesMager-nice-catch上没有
SelectSingleNode
方法,正在考虑
XmlDocument
尝试以下方法:var results=xDoc.substands(“field”)。其中(x=>x.Attribute(“name”).Value==“name”).FirstOrDefault()
string name=xDoc.SelectSingleNode(//field[@name='name'])。InnerText
使用
子体(“field”)
而不是
元素(“field”)
@MathiasR.Jessen使用LINQ是首选,但如果必须使用XPath,则需要
xDoc.XPathSelectElement(…)
。在
XDocument
@CharlesMager-nice-catch上没有
SelectSingleNode
方法,正在考虑
XmlDocument
尝试以下方法:var results=xDoc.substands(“field”)。其中(x=>x.Attribute(“name”).Value==“name”).FirstOrDefault();谢谢你的解释,现在效果很好:)。干净又漂亮。非常感谢。谢谢你的解释,现在效果很好:)。干净又漂亮。非常感谢。