2016-08-30 1 views
0

解析されたxmlドキュメントから取得した情報からツリービュー構造を表示します。それは "ItemName"だけを表示しなければならず、ノードの "レベル"に応じて、レベル1は親、レベル2は子、レベル3は子の子(リーフ)となります。メインノードとサブノードを使用してC#でツリービュー構造を作成する

サブノードを追加するときにエラーが表示されます。または、XMLノードを反復処理するときに最後のノードとサブノードのみが保存されます。

これは、これはWindows上で表示する必要があり、注意してください私は、これまで

をやったものです。ここstructureview

private void TreeNodeStrcutureManually(XmlDocument structure) 
    { 


     treeView1.Nodes.Clear(); 

     XmlElement root = structure.DocumentElement; 
     XmlNodeList itemName = root.GetElementsByTagName("ItemName"); 
     XmlNodeList level = root.GetElementsByTagName("Level"); 


     string parent = ""; 
     string childNode1 = ""; 
     string childNode2 = ""; 


     { 
      for (int i = 0; i < itemName.Count; i++) 
      { 



       TreeNode tNode; 


       if (level.Item(i).InnerText == "1") 
       { 

        parent = itemName.Item(i).InnerText; 
        tNode = treeView1.Nodes.Add(parent); 

       } 

       if (level.Item(i).InnerText == "2") 
       { 
        childNode1 = itemName.Item(i).InnerText; 
        tNode.Nodes.Add(childNode1); 
       } 

       if (level.Item(1).InnerText == "3") 
       { 

        childNode2 = itemName.Item(i).InnerText; 
        tNode.Nodes.Add(childNode2); 
       } 
       } 
      } 

を形成XMLが返されるかの例です:

    <HR> 
        <ItemName> Addidas</ItemName> 
         <level> 1 </level> 
        </HR> 


        <HR> 
        <ItemName> Shoe </ItemName> 
        <level> 2 </level> 
        </HR> 

        <HR> 
        <ItemName> Tshirt </ItemName> 
        <level> 2 </level> 
        </HR> 

         <HR> 
        <ItemName> shoelace </ItemName> 
        <level> 2 </level> 
        </HR> 


         <HR> 
         <ItemName> Running </ItemName> 
         <level> 3 </level> 
         </HR> 

         <HR> 
         <ItemName> Nike </ItemName> 
         <level> 1 </level> 
          </HR> 
+0

例外はありますか? – jonathana

+0

tNode.Nodes.Add(childNode1)は、その行に「ローカル変数tNodeの未使用の使用」を返します。 – Desolation

+0

OK ... tNodeはインスタンスを持たなければなりません:TreeNode tNode = new TreeNode(); – jonathana

答えて

0

これは、階層構造を作成するためにツリービューノードを使用する方法の例です。 各ブランチにTreeNodeオブジェクトが必要です。この例では、親と子の間に「バインディング」がなければなりません。 助けてくれることを願っています。

private void TreeNodeStrcutureManually() 
    { 
TreeNode level1=new TreeNode(); 
TreeNode level2=new TreeNode(); 
TreeNode level3=new TreeNode(); 
TreeNode level4=new TreeNode(); 
TreeNode level5=new TreeNode(); 


      for (int i = 0; i <= 4; i++) 
      { 
       switch (i) 

       { 
       case 0: 
         level1 = treeView1.Nodes.Add("LEVEL1"); 
         break; 
       case 1: 
         level2 = level1.Nodes.Add("LEVEL2"); 
        break; 
       case 2: 
        level3 = level2.Nodes.Add("LEVEL3"); 
        break; 
       case 3: 
        level4 = level3.Nodes.Add("LEVEL4"); 
        break; 
       case 4: 
        level5 = level4.Nodes.Add("LEVEL5"); 
        break; 
       default: 

        break; 
       } 
      } 
    } 

UPDATE:

あなたは、XMLを解析する方法は、正しくない、あなたが得る理由thatsの:

オブジェクト参照がオブジェクトのインスタンスに設定されていません。

これはそれを行うには、より効率的かつ厳密な方法である:

private void TreeNodeStrcutureManually(XmlDocument x) 
    { 

    TreeNode level1 = new TreeNode(); 
    TreeNode level2 = new TreeNode(); 
    TreeNode level3 = new TreeNode(); 

    XmlNodeList nl = x.SelectNodes("DOC"); 
    XmlNode root = nl[0]; 

    foreach (XmlNode xnode in root.ChildNodes) 
    { 
     string level = xnode.LastChild.InnerText; 

     switch (level) 
     { 
      case " 1 ": 
       level1 = treeView1.Nodes.Add(level); 
       break; 
      case " 2 ": 
       level2 = level1.Nodes.Add(level); 
       break; 
      case " 3 ": 
       level3 = level2.Nodes.Add(level); 
       break; 
      default: 

       break; 

     } 
    } 
} 

<DOC> </DOC>親タグを使用してXMLのthats:

もレベル1ノードの値が空白を持っていることに注意してください(「1」は「1」)。

- <DOC> 
- <HR> 
    <ItemName>Addidas</ItemName> 
    <level>1</level> 
    </HR> 
- <HR> 
    <ItemName>Shoe</ItemName> 
    <level>2</level> 
    </HR> 
- <HR> 
    <ItemName>Tshirt</ItemName> 
    <level>2</level> 
    </HR> 
- <HR> 
    <ItemName>shoelace</ItemName> 
    <level>2</level> 
    </HR> 
- <HR> 
    <ItemName>Running</ItemName> 
    <level>3</level> 
    </HR> 
- <HR> 
    <ItemName>Nike</ItemName> 
    <level>1</level> 
    </HR> 
    </DOC> 
+0

は元のXMLを見ることができません。適切なXMLには、ドキュメントをラップする親タグが必要です。元のxmlのラップタグ名に ""を置き換えてください。 xmlがxmlを操作する方法を適切に検索するように記述されていない場合、.NETフレームワークには多くのツールがあります。それがあなたに合っていれば、答えとしてマークしてください。 あなたのプロジェクトに幸運を祈る! – Jonathan

+0

私はそうして、次の例外を取得しました。式はノードセットに評価される必要があります。そのステップをスキップして


ノードから開始する方法はありませんか? – Desolation

+0

const string quote = "\" "; string web =" ArrayOfExplorer_Response xmlns = "+ quote +" www.xxx.co.za "+ quote +" xmlns:i = "+ quote +" http:// www。 w3.org/2001/XMLSchema-instance "+ quote +" "; iveは上のように宣言しようとしました – Desolation

0

@jonathanaは

これは、IVEが行わ何ですが、私は、この例外を取得「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」

  TreeNode level1 = new TreeNode(); 
      TreeNode level2 = new TreeNode(); 
      TreeNode level3 = new TreeNode(); 

      for (int count = 0; count <= 2 ; count++) 
      { 

       switch (count) 
       { 
        case 0: 

         for (int i = 0; i <= level.Count; i++) 
         { 
          if (level.Item(i).InnerText == "1") 
          { 

           parent = itemName.Item(i).InnerText; 
           level1 = treeView1.Nodes.Add(parent); 

          } 
         } 

         break; 


        case 1: 

         for (int i = 0; i <= level.Count; i++) 
         { 
          if (level.Item(i).InnerText == "2") 
          { 
           childNode1 = itemName.Item(i).InnerText; 

           level2 = level1.Nodes.Add(childNode1); 

          } 
         } 
         break; 


        case 2: 

         for (int i = 0; i <= level.Count; i++) 
         { 
          if (level.Item(1).InnerText == "3") 
          { 

           childNode1 = itemName.Item(i).InnerText; 
           level3 = level2.Nodes.Add(childNode2); 

          } 
         } 
         break; 


        default: 

         break; 
       } 

      } 


    } 
関連する問題