C#-获取xml元素及其属性的值
我试图使用XML属性条件获取元素的值。基本上,我只需要整个文档中的一个值,我一直在尝试直接查询它。这是我的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 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();谢谢你的解释,现在效果很好:)。干净又漂亮。非常感谢。谢谢你的解释,现在效果很好:)。干净又漂亮。非常感谢。