0

我有下一个 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>

我试图仅解析前 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 正在解析所有的度量值。我应该怎么做才能解决这个问题?

4

2 回答 2

0

您可以使用类的方法Elements()XElement它只会加载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");
于 2014-09-04T07:58:21.347 回答
0

XPath应该这样"./Start/MetricValue""//"意味着它将在节点树中搜索前一个节点下方的任何匹配项。

链接到语法备忘单:W3Schools - XPath 语法

于 2014-09-04T07:54:32.227 回答