<root>
<level1>
<item id="1" date="" name="" >
<item id="2" date="" name="" >
<item id="3" date="" name="" >
<item id="4" date="" name="" >
<item id="5" date="" name="" >
</level1>
</root>
我有一个像上面那样的xml结构。
我用过
XmlNodeList xnList = xmlDoc.SelectNodes("/level1");
如果我使用上面的xmlnodelist,我怎样才能专门获取id =“3”的元素?
如果我可以将所有元素作为元素存储在xnlist中,那么或更有用吗?
答案 0 :(得分:2)
XmlNodeList xnList = xmlDoc.SelectNodes("//level1/item[@id='3']");
如果您想使用Linq To Xml
var xDoc = XDocument.Parse(xmlstring); // XDocument.Load(filename)
var items = xDoc.Descendants("level1")
.First()
.Elements("item")
.Select(item => new {
ID = item.Attribute("id").Value,
Name = item.Attribute("name").Value
})
.ToList();
您甚至可以组合使用XPath和Linq2Xml
var item2 = xDoc.XPathSelectElements("//level1/item")
.Select(item => new {
ID = item.Attribute("id").Value,
Name = item.Attribute("name").Value
})
.ToList();
答案 1 :(得分:2)
除了来自@ L.B的好回答我还使用Linq,我个人觉得它更具可读性:
xdoc.Element("level1")
.Descendants("item")
.Where(x => x.Attribute("id").Value == "3").First();
但这一切都取决于你的风格;)