这是我读的文件,就是读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
但是我有一个问题,就是我读了之后,只会在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
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货