2016-09-24 53 views
-2

我有一个树在我的C#窗口应用程序,从XML文件加载。 我查了一些节点树,然后我想在XML文件中创建和保存XML文件检查树节点创建xml文件与特定的元素和标签从树c#

的样本数据

选择的节点必须在XML文件中保存的所有元素和属性。 感谢

<menu> 
<item id="43BDF924-5E" text="System Management" system="010"> 
<item id="36A21901-45" text="Basic Information"> 
<item id="7FA03116-0F" text="Info"> 
<item id="74713E10-FF" code="AGM-D-1240-01" text="Persons"></item> 
<item id="5373F379-E8" code="AGM-D-1260-01" text="Stock"></item> 
</item> 
</item> 
<item id="36A21901-45" text="Google"> 
<item id="7FA03116-0F" text="sites"> 
<item id="74876E10-FF" code="MM-D-1240-01" text="Serch"></item> 
<item id="0981F379-E8" code="MM-D-1260-01" text="Gmail"></item> 
</item> 
</item> 
</item> 
</menu> 
+1

欢迎堆栈溢出!所有发布的内容都是程序说明。但是,我们需要您[提问](// stackoverflow.com/help/how-to-ask)。我们无法确定您想从我们这里得到什么。请[编辑]您的帖子以包含我们可以回答的有效问题。提醒:请确保你知道[这里的主题是什么](// stackoverflow.com/help/on-topic),要求我们为你编写程序,而且建议是无关紧要的。 – rene

回答

0

使用XML LINQ

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Xml; 
using System.Xml.Linq; 
using System.Text.RegularExpressions; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      treeView1.Nodes.AddRange(new TreeNode[] { 
       new TreeNode(
        "id=\"43BDF924-5E\" text=\"System Management\" system=\"010\"", 
        new TreeNode[] { 
         new TreeNode(
          "id=\"36A21901-45\" text=\"Basic Information\"", 
          new TreeNode[] { 
           new TreeNode(
            "id=\"7FA03116-0F\" text=\"Info\"", 
            new TreeNode[] { 
             new TreeNode(
              "id=\"74713E10-FF\" code=\"AGM-D-1240-01\" text=\"Persons\"" 
             ), 
             new TreeNode(
              "id=\"5373F379-E8\" code=\"AGM-D-1260-01\" text=\"Stock\"" 
             ) 
            }) 
          }) 
        }), 
       new TreeNode(
        "id=\"36A21901-45\" text=\"Google\"", 
        new TreeNode[] { 
         new TreeNode(
          "id=\"7FA03116-0F\" text=\"sites\"", 
          new TreeNode[] { 
           new TreeNode(
            "id=\"74876E10-FF\" code=\"MM-D-1240-01\" text=\"Serch\"" 
           ), 
           new TreeNode(
            "id=\"0981F379-E8\" code=\"MM-D-1260-01\" text=\"Gmail\"" 
            ) 
         }) 
         }) 
      }); 
      treeView1.ExpandAll(); 

      XElement menu = new XElement("menu"); 
      foreach (TreeNode node in treeView1.Nodes) 
      { 
       XElement newChild = new XElement("item"); 
       menu.Add(newChild); 
       CreateXmlElement(newChild, node); 
      } 
     } 
     public void CreateXmlElement(XElement parentElement, TreeNode parentNode) 
     { 
      string pattern = "(?'name'\\w+)=\"(?'value'[^\"]+)"; 
      MatchCollection matches = Regex.Matches(parentNode.Text, pattern); 
      foreach (Match match in matches) 
      { 
       parentElement.Add(new XAttribute(match.Groups["name"].Value, match.Groups["value"].Value)); 
      } 


      foreach (TreeNode node in parentNode.Nodes) 
      { 
       XElement newChild = new XElement("item"); 
       parentElement.Add(newChild); 
       CreateXmlElement(newChild, node); 
      } 
     } 
    } 
} 
+0

感谢您的回答, 是否有任何方法通过代码和动态插入属性。 你所做的事情是静态的。如果Xml文件被更改,则代码必须更改。 如何在xml中动态插入树中相应节点的所有节点的属性。感谢 –

+0

这不是静态的,因为我加载了treeview,然后只是创建测试数据。所有你需要的是读取treeview并保存到xml的代码的最后一部分。您可以添加仅保存已检查节点的选项。我以为你有加载树视图的代码。 – jdweng