C#XML解析的SelectNodes
我的下一个XML代码:C#XML解析的SelectNodes
<Start>
<MetricValue>
<Name>Name1</Name>
<Value>1</Value>
</MetricValue>
<MetricValue>
<Name>Name1</Name>
<Value>1</Value>
</MetricValue>
<Test>
<MetricValue>
<Name>Name1</Name>
<Value>1</Value>
</MetricValue>
<MetricValue>
<Name>Name1</Name>
<Value>1</Value>
</MetricValue>
</Test>
</Start>
我试图解析只有第2分量值,而不是从“测试”标签之间。
XmlNodeList nlMetricValues = xmlDoc.SelectNodes("//Start//MetricValue");
foreach (XmlNode nMetricValue in nlMetricValues)
{
Console.WriteLine("\Name: " + nMetricValue.SelectSingleNode(".//Name").InnerText);
Console.WriteLine("\tValue: " + nMetricValue.SelectSingleNode(".//Value")).InnerText);
}
但是这个foreach解析所有的度量值。我该怎么做才能解决这个问题?
您的XPath
应该是"./Start/MetricValue"
,因为"//"
表示它将搜索节点树以查找在前一个节点下的任何匹配项。
链接到语法的cheatsheet:W3Schools - XPath Syntax
谢谢。正在工作:) – 2014-09-04 08:06:52
您可以使用该方法XElement
类的Elements()
。它将只加载MetricValue
元素是Start
元素的子元素:
var xml = @"
<Start>
<MetricValue>
<Name>Name1</Name>
<Value>1</Value>
</MetricValue>
<MetricValue>
<Name>Name1</Name>
<Value>1</Value>
</MetricValue>
<Test>
<MetricValue>
<Name>Name1</Name>
<Value>1</Value>
</MetricValue>
<MetricValue>
<Name>Name1</Name>
<Value>1</Value>
</MetricValue>
</Test>
</Start>";
var metricValues = XElement.Parse(xml).Elements("MetricValue");
不应该是'XElement.Parse(xml).Element(“Start”)。Elements(“MetricValue”);'? – toadflakz 2014-09-04 07:59:31
@toadflakz,不,不是真的。这里的根元素是'Start',所以你不需要再调用'Element()'方法。 – RePierre 2014-09-04 11:09:29
对吗?我一直使用'XDocument.Parse()',并且需要额外的'Element()'调用,这就是为什么我查询它 - 显然'XElement.Parse()'返回'XElement',而不是'XDocument'!哎呀! – toadflakz 2014-09-04 11:51:44
请添加用于选择MetricValue节点,因为这是哪里的问题可能是XPath。 – toadflakz 2014-09-04 07:52:44
完成。我也添加了xmlnode – 2014-09-04 07:54:15