C# Xml Parse SelectNodes

本文关键字:SelectNodes Parse Xml | 更新日期: 2023-09-27 18:20:32

我有下一个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正在解析所有的度量值。我该怎么办才能解决这个问题?

C# Xml Parse SelectNodes

您的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");