2012-01-03 18 views
0

私がしようとしているのは、理想的にはネストしたリストを作成することです。このタスクの方が良い場合には、2次リストを作成してください。ID => 1 Name => Hickory明示的にノードを選択せず​​に。c#XML innerArmlをinnertextから分離する構文解析

私はSelectNode(Woods/Wood)を使用し、次にnode["ID"].InnerTextのようなことをすることができますが、それはノード名が何であるかを知る必要があります。

ノード番号が7ではなく36個であっても、これはwood.xmlとなり、ノードの名前がわからないとします。私はouterxml/innerxmlを使ってみましたが、それはあまりにも多くの情報を与えます。私は基本的に木を作成できるようになる

XmlDocument doc = new XmlDocument(); 
     doc.Load("wood.xml"); 

     //Here is wood.xml 
     /*<Woods><Wood><ID>1</ID><Name>Hickory</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>2</ID><Name>Soft Maple</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>3</ID><Name>Red Oak</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood></Woods>*/ 


     XmlNode root = doc.FirstChild; 

     //Display the contents of the child nodes. 
     if (root.HasChildNodes) 
     { 
      for (int i=0; i<root.ChildNodes.Count; i++) 
      { 
       Console.WriteLine(root.ChildNodes[i].InnerXml); 
       Console.WriteLine(); 
      } 

      Console.ReadKey(); 
     } 

バッファ」あなたは私が他の場所で、これらの値にアクセスすることができます場合。

申し訳ありませんがわかりにくければ、私は本質的にこれを「より抽象的な」ものにしたいと思います。

「Weight」の名前を「HowHeavy」に変更する場合、または「NumberOfBranches」という要素を追加する場合は、xmlファイルの構造をハードコードする必要はありません。

+2

質問は何を使用することができますか? – tafa

+0

"私はノードの名前を決して知らないでしょう。"次に、どのようにデータを取得したいかサンプルを与えてください。 –

+0

それは私がどうやって行うのか分からないことです。私がノードの名前を知っているなら、SelectSingleNode( "ID")を使うことができます。InnerText。私が達成しようとしているのは、ノード名が分からずにXMLファイルを読むことができることです。 – Windex

答えて

2

これはあなたの後ですか?

class Program 
    { 
     static void Main(string[] args) 
     { 
      string xml = @"<Woods><Wood><ID>1</ID><Name>Hickory</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>2</ID><Name>Soft Maple</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>3</ID><Name>Red Oak</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood></Woods>"; 

      XDocument doc = XDocument.Parse(xml); 
      //Get your wood nodes and values in a list 
      List<Tuple<string,string>> list = doc.Descendants().Select(a=> new Tuple<string,string>(a.Name.LocalName,a.Value)).ToList(); 

      // display the list 
      list.All(a => { Console.WriteLine(string.Format("Node name {0} , Node Value {1}", a.Item1, a.Item2)); return true; }); 
      Console.Read(); 
     } 
    } 
+0

それはまさに私がやろうとしていることです。 Linqを使わずにこれを行う方法はありますか? – Windex

+1

@Windexはい、それは 'ジョシュアミルズの答えを見ることが可能ですが、あまりにも冗長ので、Linqを楽しむ;)http://stackoverflow.com/questions/847978/c-sharp-how-can-i-get-all-要素名からXMLファイルへの要素名 –

1

あなたはxmlDocument.SelectNodes("//child::node()")