【问题标题】:.NET LINQ2XML parsing XML and getting all nodes with specifc name.NET LINQ 2 XML 解析 XML 并获取具有特定名称的所有节点
【发布时间】:2017-06-26 19:13:02
【问题描述】:

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

 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 文件的查询..

有人可以帮帮我吗?我是否必须将其存储到 Titles 数组或类似的东西中?

【问题讨论】:

  • 您可以为此使用XDocument。示例代码包含一个 LINQ 查询。 Load(TextReader)你的文件然后查询。
  • 你可以使用XContainer.Descendants(XName)
  • @dbc 之后会发生什么?我真的可以用一个例子,因为我对 linq2xml 完全陌生
  • 您的问题不包括您在查询XmlDocument 后所做的事情,所以我真的不能说在那之后该怎么做。

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


【解决方案1】:

您可以在根元素上使用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.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多