LINQ TO XML 解决方案

本文关键字:解决方案 XML TO LINQ | 更新日期: 2023-09-27 18:35:12

<Root xmlns="http://tempuri.org/DataSourceSchemaConfig.xsd">
 <Node>
  <Name>Peter</Name>
 </Node>
 <Node>
  <Name>John</Name>
 </Node>
</Root>

如何获取姓名列表?

我一直在尝试这个,但它不起作用,我的错误在哪里?

            var lists = from node in nodes.Descendants()
                        where node.Name.LocalName.Equals("Node")
                        select node.Elements("Name").First().Value;

L.B 解决方案仅在我从根标签中删除 xmlns="http://tempuri.org/DataSourceSchemaConfig.xsd" 时才有效。

LINQ TO XML 解决方案

 XDocument xDoc = XDocument.Load(....);
 var names = xDoc.Descendants("Name").Select(x => x.Value);

--编辑--

XDocument xDoc = XDocument.Load(....);
XNamespace ns = XNamespace.Get("http://tempuri.org/DataSourceSchemaConfig.xsd");
var names = xDoc.Descendants(ns+"Name").Select(x => x.Value);

试试这个:

var lists = (from node in nodesxml.Root.Descendants("Node")
                     select new
                     {Name = node.Element("Name").Value}).ToList();

其中 nodesxml 是你的 XDocument

另一种解决方案(不是 LINQ 但有效,与命名空间无关):

 XmlDocument doc = new XmlDocument();
 doc.LoadXml(xmlstring);
 XmlNodeList nlist = doc.SelectNodes("/*[local-name(.)='Root']/*[local-name(.)='Node']/*[local-name(.)='Name']/text()");
 var list = new List<string>(nlist.Cast<XmlNode>().Select(x => x.Value));

该 XPath 负责解决 DefaultNamespace 问题,因为您不能使用 XmlNamespaceManager 指定默认命名空间。