首页 新闻 会员 周边 捐助

请帮忙把treeview节点写入xml文件保存遇到的问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-11-02 23:23

代码段

using System.Xml.Linq;

//写xml  这样循环写入xml 都写到根节点上去了,没有找到哪里的问题

 private void WriteXML(TreeView t, string path)
        {

            XDocument xdoc = new XDocument();           
            TreeNode tn = t.Nodes[0];
            XElement xe = new XElement(GetStr(tn.Text));
            xe.Value = tn.Tag.ToString();
            xdoc.Add(xe);
            WriteXMLC(tn, xe);

            xdoc.Save(path);

        }

 private void WriteXMLC(TreeNode tn, XElement xe)
        {
            foreach (TreeNode node in tn.Nodes)
            {
                XElement xec = new XElement(GetStr(node.Text));

                xec.Value = node.Tag.ToString();
                xe.Add(xec);

                if (node.Nodes.Count > 0)
                {
                    WriteXMLC(node, xec);
                }
                Console.WriteLine(node.Text );
            }
        }

//读xml  

 private void LoadXml(string path, TreeView t)
        {
            //根节点
            XDocument xdoc = XDocument.Load(path);
            XElement xe = xdoc.Root;
            TreeNode tn = new TreeNode();
            tn.Text = GetXMLValueName(xe.Value);
            Console.WriteLine(xe.Value );
            tn.Tag = xe.Value;
            t.Nodes.Add(tn);
            //加载子节点
            LoadXmlC(xe, tn);
            }

 private void LoadXmlC(XElement xe, TreeNode tn)
        {
            foreach (XElement item in xe.Elements())
            {
                TreeNode tnc = new TreeNode();
                tnc.Text = GetXMLValueName(item.Value);
                tnc.Tag = item.Value;
                tn.Nodes.Add(tnc);
                if (item.Elements().Count() > 0)
                {
                    LoadXmlC(item, tnc);
                }
            }
        }

问题补充:

问题是 xdoc.nodes.add(xe);添加的根节点,但是调用 LoadXmlC(XElement xe, TreeNode tn)是把新创建的xelement对象添加到xe根节点下,是xe根节点的子节点。但是实际是 这样写入后,在读文件的时候  XElement xe = xdoc.Root;xe.Value获取的是整xe及子节点的字符串。

易顺金的主页 易顺金 | 初学一级 | 园豆:2
提问于:2013-10-30 14:38
< >
分享
最佳答案
0

直接用XDocument.Add添加的肯定是根节点,要先确定你要添加到哪个节点下如  xdoc.Element("Child").Add(xe)

收获园豆:8
Zery | 大侠五级 |园豆:6151 | 2013-10-30 14:46
其他回答(2)
0

我的xml布局是这样的:

<root>

  <item>

    <X>x<X>

 

  </item>

  <item>

.......

</root>
str=节点值;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("MyInfo.xml");
XmlNode root = xmlDoc.SelectSingleNode("Root");
XmlElement xe1 = xmlDoc.CreateElement("Item");
XmlElement xesub1 = xmlDoc.CreateElement("X");
xesub1.InnerText = str;
xe1.AppendChild(xesub1);
root.AppendChild(xe1);
xmlDoc.Save("MyInfo.xml");

收获园豆:2
iEvent | 园豆:529 (小虾三级) | 2013-10-30 15:03
0

找到问题答案了。在写XML添加根元素的时候,不能添加根元素的Value值,应该添加属性保存它的数据,否则读XML文件用xe.Value想取根元素的值,就把根元素的value和它所有的子元素作为字符串全部取出。

易顺金 | 园豆:2 (初学一级) | 2013-11-02 23:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册