0

私がこのXMLファイルを持っているとしましょう:

<Names>
    <Name>
        <FirstName>John</FirstName>
        <LastName>Smith</LastName>
    </Name>
    <Name>
        <FirstName>James</FirstName>
        <LastName>White</LastName>
    </Name>
</Names>

そして今、私はノードのすべての名前を印刷したいと思います:

Names
Name
FirstName
LastName

XmlNodeListですべてを取得できましたが、SelectNodesがどのように機能するかわかりません。

XmlNodeList xnList = xml.SelectNodes(/*What goes here*/);

すべてのノードを選択してから、xnListのforeachを実行します(私が想定している.Valueプロパティを使用)。

これは正しいアプローチですか?selectNodesを使用してすべてのノードを選択するにはどうすればよいですか?

4

3 に答える 3

2

スコープ内にLINQおよびLINQtoXMLがあることを確認します。

using System.Linq;
using System.Xml.Linq;

XDocumentそれらを:にロードする場合

var doc = XDocument.Parse(xml);    // if from string
var doc = XDocument.Load(xmlFile); // if from file

あなたは次のようなことをすることができます:

doc.Descendants().Select(n => n.Name).Distinct()

これにより、ドキュメント内のすべての異なるXName要素のコレクションが得られます。XML名前空間を気にしない場合は、次のように変更できます。

doc.Descendants().Select(n => n.Name.LocalName).Distinct()

これにより、すべての個別の要素名のコレクションが文字列として提供されます。

于 2012-05-13T23:29:23.357 に答える
0

それを行うにはいくつかの方法があります。

XDocumentとLINQ-XMLを使用

foreach(var name in doc.Root.DescendantNodes().OfType<XElement>().Select(x => x.Name).Distinct()) 
{ 
    Console.WriteLine(name); 
} 

C#3.0以降を使用している場合は、これを行うことができます

var data = XElement.Load("c:/test.xml"); // change this to reflect location of your xml file 
var allElementNames =  
(from e in in data.Descendants() 
select e.Name).Distinct();
于 2012-05-13T23:33:43.077 に答える
0

追加

 using System.Xml.Linq;

その後、あなたはすることができます

var element = XElement.Parse({Your xml string});

    Console.Write(element.Descendants("Name").Select(el => string.Format("{0} {1}", el.Element("FirstName").Value, el.Element("LastName").Value)));
于 2012-05-13T23:42:16.493 に答える