我正在尝试为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>
我希望得到名为“name 5”的节点及其属性。问题是我希望获得此节点,即使它更深或节点级别不同。名称属性可以假设为唯一我的意思是我想要的是:
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
}
这样的方法有用吗?
答案 0 :(得分:2)
您可以使用接受SelectNodes()
的SelectSingleNode()
或XPath expression作为参数。 XPath支持表达查询以在XML文档中的任何位置查找任何名称的元素,其中name
属性值等于&#34;名称5&#34; :
var searchParam = "name 5";
var xpath = string.Format("//*[@name='{0}']", searchParam);
var wantedNode = xmlDoc.SelectSingleNode(xpath);
答案 1 :(得分:1)
您可以使用System.Xml.Linq
:
var item = xmlDoc.Descendants()
.FirstOrDefault(node => (string)node.Attribute("name") == "name 5")