我有下一个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>
我试图只分析前两个度量值,而不是"测试"标记之间的度量值。
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"
,因为"//"
意味着它将在节点树中搜索上一个节点下面的任何匹配项。
语法备忘单链接:W3Schools-XPath语法
您可以使用XElement
类的方法Elements()
。它将只加载作为Start
元素的子元素的MetricValue
元素:
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");