晕死。这种xml格式 怎么能行的通。    node节点一般都定义成英文。比如:
<Document value="2014年工作文档">
</Document>

解决方案 »

  1.   


    我把全部代码贴出来吧,刚做这个不是太明白,请您详细指点一下可以么?namespace test_xml_treeview
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private TreeView thetreeview;
            private string xmlfilepath;
            XmlTextWriter textWriter;
            XmlNode Xmlroot;
            XmlDocument textdoc = new XmlDocument();        private void button1_Click(object sender, EventArgs e)   //将treeview存入xml
            {
                thetreeview = treeView1;
                xmlfilepath = @"F:\jzd\test_xml treeview\test_xml treeview\xml1.xml";
                textWriter = new XmlTextWriter(xmlfilepath, null);
                textWriter.Formatting = Formatting.Indented;
                textWriter.WriteStartDocument();
                textWriter.WriteComment("this XML is created from a tree");
                textWriter.WriteStartElement("根节点");
                textWriter.WriteEndElement();
                textWriter.WriteEndDocument();
                textWriter.Close();
                textdoc.Load(xmlfilepath);
                XmlElement Xmlnode = textdoc.CreateElement(thetreeview.Nodes[0].Text);
                Xmlroot = textdoc.SelectSingleNode("根节点");
                TransTreeSav(thetreeview.Nodes, (XmlElement)Xmlroot);
            }        int TransTreeSav(TreeNodeCollection nodes, XmlElement ParXmlnode)
            {
                //-------遍历树的各个故障节点,同时添加节点至XML  
                XmlElement xmlnode;
                Xmlroot = textdoc.SelectSingleNode("根节点");
                foreach (TreeNode node in nodes)
                {
                    xmlnode = textdoc.CreateElement(node.Text);
                    ParXmlnode.AppendChild(xmlnode);                if (node.Nodes.Count > 0)
                    {
                        TransTreeSav(node.Nodes, xmlnode);
                    }
                }
                textdoc.Save(xmlfilepath);
                return 0;
            }        private void button2_Click(object sender, EventArgs e)   //读取xml文件
            {
                thetreeview = treeView1;
                xmlfilepath = @"F:\jzd\test_xml treeview\test_xml treeview\xml1.xml";
                textdoc.Load(xmlfilepath);
                XmlNode root = textdoc.SelectSingleNode("根节点");//读的xml的节点名
                foreach (XmlNode subXmlnod in root.ChildNodes)
                {
                    TreeNode trerotnod = new TreeNode();
                    trerotnod.Text = subXmlnod.Name;
                    thetreeview.Nodes.Add(trerotnod);
                    TransXML(subXmlnod.ChildNodes, trerotnod);
                }   
            }
           int TransXML(XmlNodeList Xmlnodes, TreeNode partrenod)
            {
                //------遍历XML中的所有节点,仿照treeview节点遍历函数  
                foreach (XmlNode xmlnod in Xmlnodes)
                {
                    TreeNode subtrnod = new TreeNode();
                    subtrnod.Text = xmlnod.Name + xmlnod.Value;
                    partrenod.Nodes.Add(subtrnod);                if (xmlnod.ChildNodes.Count > 0)
                    {
                        TransXML(xmlnod.ChildNodes, subtrnod);
                    }
                }
                return 0;
            }  
        }
    }
      

  2.   


    可以请您详细说明一下么?刚做这个不是太明白,下面是代码:namespace test_xml_treeview
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private TreeView thetreeview;
            private string xmlfilepath;
            XmlTextWriter textWriter;
            XmlNode Xmlroot;
            XmlDocument textdoc = new XmlDocument();        private void button1_Click(object sender, EventArgs e)   //将treeview存入xml
            {
                thetreeview = treeView1;
                xmlfilepath = @"F:\jzd\test_xml treeview\test_xml treeview\xml1.xml";
                textWriter = new XmlTextWriter(xmlfilepath, null);
                textWriter.Formatting = Formatting.Indented;
                textWriter.WriteStartDocument();
                textWriter.WriteComment("this XML is created from a tree");
                textWriter.WriteStartElement("根节点");
                textWriter.WriteEndElement();
                textWriter.WriteEndDocument();
                textWriter.Close();
                textdoc.Load(xmlfilepath);
                XmlElement Xmlnode = textdoc.CreateElement(thetreeview.Nodes[0].Text);
                Xmlroot = textdoc.SelectSingleNode("根节点");
                TransTreeSav(thetreeview.Nodes, (XmlElement)Xmlroot);
            }        int TransTreeSav(TreeNodeCollection nodes, XmlElement ParXmlnode)
            {
                //-------遍历树的各个故障节点,同时添加节点至XML  
                XmlElement xmlnode;
                Xmlroot = textdoc.SelectSingleNode("根节点");
                foreach (TreeNode node in nodes)
                {
                    xmlnode = textdoc.CreateElement(node.Text);
                    ParXmlnode.AppendChild(xmlnode);                if (node.Nodes.Count > 0)
                    {
                        TransTreeSav(node.Nodes, xmlnode);
                    }
                }
                textdoc.Save(xmlfilepath);
                return 0;
            }        private void button2_Click(object sender, EventArgs e)   //读取xml文件
            {
                thetreeview = treeView1;
                xmlfilepath = @"F:\jzd\test_xml treeview\test_xml treeview\xml1.xml";
                textdoc.Load(xmlfilepath);
                XmlNode root = textdoc.SelectSingleNode("根节点");//读的xml的节点名
                foreach (XmlNode subXmlnod in root.ChildNodes)
                {
                    TreeNode trerotnod = new TreeNode();
                    trerotnod.Text = subXmlnod.Name;
                    thetreeview.Nodes.Add(trerotnod);
                    TransXML(subXmlnod.ChildNodes, trerotnod);
                }   
            }
           int TransXML(XmlNodeList Xmlnodes, TreeNode partrenod)
            {
                //------遍历XML中的所有节点,仿照treeview节点遍历函数  
                foreach (XmlNode xmlnod in Xmlnodes)
                {
                    TreeNode subtrnod = new TreeNode();
                    subtrnod.Text = xmlnod.Name + xmlnod.Value;
                    partrenod.Nodes.Add(subtrnod);                if (xmlnod.ChildNodes.Count > 0)
                    {
                        TransXML(xmlnod.ChildNodes, subtrnod);
                    }
                }
                return 0;
            }  
        }
    }
      

  3.   

    意思是把你的xml文件格式修改一下,至于怎么读取,你还需要修改代码的。
    或者使用linq  to  xml 文件 进行xml文件的操作。
    http://blog.csdn.net/duanzi_peng/article/details/24018431
      

  4.   

    <2014年工作文档 /> 
    这是xml标签中包含中文。需要xml支持中文标签。1.<?xml version="1.0" encoding="gb2312" ?> 声明编码方式为gb2312或者utf-8。
    用xml encoding就可以设定字符集。但是所设定的字符集必须与你文件所使用的字符集对应。有很多人设定了某种encoding(例如GB2312),但文件本身实际上是以另外的编码方式(例如Unicode)保存,就会出现错误。强烈建议使用UTF-8来保存带有中文字符的XML。如果要使用本地字符集,建议优先使用GB18030(即2000年的新的取代gb2312的国家标准)。但是注意是否支持中文标签,还取决于你所使用的xml工具包,例如有些xml parser就不支持中文标签但可以包含中文数据。2.建立一个映射,用英文标签和中文标签建立一个一对一映射。进行一个转换。如果node节点内的字符串包含很多特殊字符,可以使用CDATA[]把整段字符串包含进去,里面的所有的字符(包含特殊字符)都会直接被存储和解析,不会发生转义。
      

  5.   

    Quote: 引用 6 楼 zhi_ai_yaya 的回复:

    如果node节点内的字符串包含很多特殊字符,可以使用CDATA[]把整段字符串包含进去,里面的所有的字符(包含特殊字符)都会直接被存储和解析,不会发生转义。[/quote]这个不太明白,可否详细举个例子?谢谢!
      

  6.   

    刚测试了一下由代码创建的表保存的文件,创建2个列分别为2014年记事\2000年记事,写入的内容分别是2014年记事内容\2000年记事内容,打开保存的XML文件发现自动保存内容如下: 
    <?xml version="1.0" standalone="true"?>-<DocumentElement>
    -<定义列创建的表><_x0032_014年记事>2014年记事内容</_x0032_014年记事><_x0032_000年记事>2000年记事内容</_x0032_000年记事></定义列创建的表><定义列创建的表/></DocumentElement>
    读取和保存均正常
    参考代码http://blog.csdn.net/xianfajushi/article/details/11742249
      

  7.   

    CDATA的定义,可以参考下百度百科:CDATA
    形式:
    <![CDATA[文本内容]]>
    里面有个例子:
    转义字符
    编辑非法的 XML 字符必须被替换为实体引用(entity reference)。
    假如您在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。因此你不能这样写:
    <message>if salary < 1000 then</message>为了避免此类错误,需要把字符 "<" 替换为实体引用,就像这样:
    <message>if salary &lt; 1000 then</message>如果在<message></message>之间包含很多的<  >  , ' ",每个都要转义,很麻烦,就用CDATA括起来,就像这样:
    <script>
    <![CDATA[
    function matchwo(a,b)
    {
    if (a < b && a < 0) then
      {
      return 1;
      }
    else
      {
      return 0;
      }
    }
    ]]>
    </script>
    红色部分的内容,将作为一个字符串值,成为<scrit></script>这个标签的value。