1
<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;

LBソリューションは、ROOTタグからxmlns="http://tempuri.org/DataSourceSchemaConfig.xsd"を削除した場合にのみ機能します。

4

3 に答える 3

5
 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);
于 2012-05-23T20:30:39.927 に答える
1

これを試して:

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

ここで、nodesxmlはXDocumentです。

于 2012-05-23T20:38:43.500 に答える
1

さらに別の解決策(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));

XmlNamespaceManagerを使用してデフォルトの名前空間を指定することはできないため、そのXPathはDefaultNamespaceの問題を処理します。

于 2012-05-23T20:58:08.490 に答える