C# Xml Parse SelectNodes
У меня есть следующий код 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 анализирует все метрические значения. Что я должен сделать, чтобы решить эту проблему?
2 ответа
Решение
Ваш XPath
должно быть "./Start/MetricValue"
как "//"
означает, что будет искать дерево узлов для любого соответствия ниже предыдущего узла.
Ссылка на сводную таблицу синтаксиса: W3Schools - Синтаксис XPath
Вы можете использовать метод 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");