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" 时才有效。
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 指定默认命名空间。