这是我读的文件,就是读xml后生成一个TreeView
但是我有一个问题,就是我读了之后,只会在root下生成目录,再然后全都是叶子结点了
namespace DataEditor.XMLRead
{
    class ReadXmlCreateTreeView
    {
        public ReadXmlCreateTreeView(TreeView xmlTreeView)
        {
            
            doc = XDocument.Load(TreeXMLElem.DidFileName);
            TreeNode node = new TreeNode();  
            ReadXml(doc.Elements(TreeXMLElem.root), node);
            xmlTreeView.Nodes.Add(node);
            
        }        private void ReadXml(IEnumerable<XElement> element, TreeNode p_node)
        {
            var XMLIDelement = from XMLTree in element.Elements(TreeXMLElem.ID)
                             select XMLTree;           foreach (var IDnode in XMLIDelement)
            {
                TreeNode idnode = new TreeNode(IDnode.Element(TreeXMLElem.Title).Value);
                p_node.Nodes.Add(idnode);
                ReadXml(IDnode.Elements(), idnode);
                
                //node.Tag = ;
            }           
        }        private XDocument doc = null;
    }
}然后像下面这个xml文件
任务用奖励物品    ->  这个结点没有创建出来 因为我用了ID创建结点,但是在这个目录下才有ID这些结点
也就是在最终结点下根本没有Title这个文件夹的结点,我知道是上面的代码写的不对,但是不知道怎么把Title创建结点,因为本来是根据ID创建结点的,也就是每次读的元素只是ID,Title不会读取....也就是每个分支结点都是ID。。顺便弄上写xml的代码,希望大家帮我下,不会写算法啊
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.Xml.Linq;
using System.Xml.Schema;
using System.Xml.XPath;namespace DataEditor.XMLRead
{
    
    
    class ReadDirToCreateXML
    {
        public ReadDirToCreateXML()
        {
            NewIDXmlNode();
            ReadDir(dirXmlDocRoot, TreeXMLElem.rootpath);
            dirXmlDocRoot.Save(TreeXMLElem.DidFileName);
        }        public void ReadDir(XElement node, string filepath)
        {
            System.IO.DirectoryInfo f_dir = new System.IO.DirectoryInfo(filepath);
            System.IO.FileSystemInfo[] fin_fos = f_dir.GetFileSystemInfos();
            int length = fin_fos.Length;
            for (int i = 0; i < length; ++i)
            {
                
                if ("System.IO.DirectoryInfo" == fin_fos[i].GetType().ToString())
                {
                    XElement IDXmlDocNode = NewIDXmlNode();
                    node.Add(IDXmlDocNode);
                    SetFolderValue(IDXmlDocNode, fin_fos[i].Name);
                    ReadDir(IDXmlDocNode, filepath + "\\\\" + fin_fos[i].Name);                  
                }                
            }    
        }        private void SetFolderValue(XElement IDXmlDocNode, string value)
        {
            IDXmlDocNode.Element(TreeXMLElem.FileType).Value = TreeXMLElem.FolderNode;
            IDXmlDocNode.Element(TreeXMLElem.Title).Value = value;
            Int64 ZeroValue = 0;
            IDXmlDocNode.Element(TreeXMLElem.IDValue).Value = ZeroValue.ToString();
            IDXmlDocNode.Element(TreeXMLElem.ModifyVersion).Value = ZeroValue.ToString();
            IDXmlDocNode.Add(new XElement(TreeXMLElem.Subnodes));
        }        private XElement NewIDXmlNode()
        {
            XElement IDXmlDocNode = new XElement(TreeXMLElem.ID);
            IDXmlDocNode.Add(new XElement(TreeXMLElem.FileType));
            IDXmlDocNode.Add(new XElement(TreeXMLElem.IDValue));
            IDXmlDocNode.Add(new XElement(TreeXMLElem.Title));
            IDXmlDocNode.Add(new XElement(TreeXMLElem.User));
            IDXmlDocNode.Add(new XElement(TreeXMLElem.ModifyVersion));            return IDXmlDocNode;
        }        
        private XElement dirXmlDocRoot = new XElement(TreeXMLElem.root);
        
    }
}
我同事说要么不要用ID创建结点,但是root下根本没有Title元素的.所以.....我要么改别的读结点的方式,要么换写的方式,求大神帮出个注意linqxml