.NET LINQ2XML解析XML并获取具有特定名称的所有节点

时间:2017-06-26 19:13:03

标签: c# asp.net xml linq linq-to-xml

我正在尝试使用Linq2XML迁移后使用其他一些解析XML的方法,如下所示:

 string xml = "//some xml file here";
 XmlDocument doc = new XmlDocument();
 doc.LoadXml(xml);
 for (int i = 0; i < doc.GetElementsByTagName("Title").Count; i++)
 {
  // get all elements values that have this tag name
 }

我现在想把它翻译成LINQ2XML并基本上针对这个测试XML文件写一个查询..

有人可以帮帮我吗?我是否必须将它存储在一系列标题或类似的内容中?

1 个答案:

答案 0 :(得分:2)

您可以在根元素上使用XContainer.Descendants(XName)(或XElement.DescendantsAndSelf(XName)):

var doc = XDocument.Parse(xml);
foreach (var element in doc.Descendants("Title"))
{
    // element is an element with the name "Title" -- process it however
    // you want.
}

请注意,如果您通过添加或删除foreach循环内的元素来修改文档,则需要对列表进行快照,如下所示:

foreach (var element in doc.Descendants("Title").ToList())
{
    // element is an element with the name "Title" -- process it however
    // you want.
}

最后,如果您想查找仅包含特定local name和忽略命名空间的元素,您可以执行以下操作:

foreach (var element in doc.Descendants().Where(e => e.Name.LocalName == "Title"))
{
    // element is an element with the local name "Title" -- process it however
    // you want.
}