Найти узел XML на более глубоких уровнях рекурсивно в C#
Я пытаюсь получить узел на глубоком уровне для структуры XML.
Моя структура xml:
<Level1 name="data_reply">
<Level2 name="name1">
<level3 name="name2" />
<Level3 name="name3 >
<Level4 name="name4"/>
<Level4 name="name5" someAttributes="blah blah"/>
</Level3>
<Level2 name="name6"/>
<Level2 name="name7"/>
</Level1>
Я хочу получить узел с именем "имя 5" и его атрибуты. Проблема в том, что я хочу получить этот узел, даже если он был глубже или уровни узла разные. Атрибуты name можно считать уникальными. Я имею в виду, что я хочу что-то вроде:
var xmlDoc = new XmlDocument();
xmlDoc.Load("FileFullPath");
var wantedNode = xmlDoc.DocumentElement.GetNodeWithName("name5") // Which can be recursive or iterative
Моя подпись метода может быть такой:
public XmlNode GetNodeWithName(string nodeNameAttributeValue){
... Method content
return myNode
}
Есть ли какая-то легкость в использовании такого метода?
2 ответа
Решение
Ты можешь использовать System.Xml.Linq
:
var item = xmlDoc.Descendants()
.FirstOrDefault(node => (string)node.Attribute("name") == "name 5")
Ты можешь использовать SelectNodes()
или же SelectSingleNode()
которые принимают XPath выражение в качестве параметра. XPath поддерживает выражение запроса для поиска элемента с любым именем в любом месте XML-документа, где name
значение атрибута равно "имя 5":
var searchParam = "name 5";
var xpath = string.Format("//*[@name='{0}']", searchParam);
var wantedNode = xmlDoc.SelectSingleNode(xpath);