我的数据库的内容是:
tbDept:
ID ParentID DeptName LevelID RoleID
1 0 软体研发处 0 0
2 1 软体研发一部 0 0
3 1 软体研发二部 0 0
4 1 软体研发三部 0 0
5 2 软体研发一部一课 0 0
6 2 软体研发一部二课 0 0
7 3 软体研发二部一课 0 0
8 3 软体研发二部一课 0 0
9 4 软体研发三部一课 0 0
10 4 软体研发三部二课 0 0
11 5 AAA 1 1
12 5 BBB 1 1
......
28 10 RRR 2 2
我想用遍历这个tbDept,然后根据遍历的结果生成带有父子关系的XML文件,小女子望各位能人能够赐教,该如何实现这个XML文档
tbDept:
ID ParentID DeptName LevelID RoleID
1 0 软体研发处 0 0
2 1 软体研发一部 0 0
3 1 软体研发二部 0 0
4 1 软体研发三部 0 0
5 2 软体研发一部一课 0 0
6 2 软体研发一部二课 0 0
7 3 软体研发二部一课 0 0
8 3 软体研发二部一课 0 0
9 4 软体研发三部一课 0 0
10 4 软体研发三部二课 0 0
11 5 AAA 1 1
12 5 BBB 1 1
......
28 10 RRR 2 2
我想用遍历这个tbDept,然后根据遍历的结果生成带有父子关系的XML文件,小女子望各位能人能够赐教,该如何实现这个XML文档
解决方案 »
- 异常信息:updata语句语法错误
- TFS 下工程添加后无法CHECK IN的问题!!标题要长!!分数要多!!
- bindingsource的重新绑定问题
- datagridview 怎么将第N条显示在顶部 而并不一定是第一条记录
- 请教一个发送邮件的问题。
- 在国内如何购买XtraGrid?
- (有没有人可以帮我啊!)关于使用httpwebrequest抓网页用streamreader.readtoend()读网页内容时有些网页会导致cpu100%并死机?
- 那位大哥给解决一下把谢谢vs2003 DataGrid问题
- decimal转化为float,并保存两位小数
- 一个窗体的操作问题??? 文件操作问题 急等...
- 怎样知道writeline一共输出了多少行?
- winfrom打包问题
这个用代码如何实现具有父子关系的XML啊,那levelID和RoleID该往哪放?
RoleID中1表示BIOS,2表示test,3表示driver,4表示PM我主要需求是:
能够把tbDept中的表中数据全部用XML表示,XML文档主要具有父子关系,例如:
<node DeptName="软体研发处" ParentID="0" LevelID="0" RoleID="0">
<node Deptnaem="软体研发一部" parentID="1" LevelID="0" RoleID="0">
<node DeptName="软体研发一部一课" ParentID="2" levelID="0" RoleID="0">
<node DeptName="AAA" ParentID="5" levelID="1" RoleID="1"></node>
<node DeptName="BBB" ParentID="5" levelID="1" RoleID="1"></node>
<node DeptName="CCC" ParentID="5" levelID="2" RoleID="1"></node>
</node>
</node>
</node>
大概是这样,其实我也不知道像这样设计XML会不会不好,因为接下我要把我生成的XML文档填充到datatable,然后绑定到TreeView。
查出数据集合,然后遍历插入节点下面是个XMLHelper类,自己看http://www.cnblogs.com/zhdonghu/archive/2010/10/16/1852917.html
OleDbData md = new OleDbData();
md.ExecuteReader("select * from tbDept");
XmlDocument xmlDoc = new XmlDocument();
XmlElement root = xmlDoc.CreateElement("root");
xmlDoc.AppendChild(root);
while (md.Reader.Read())
{
int parentID = Convert.ToInt32(md.Reader["ParentID"]);
XmlElement node = xmlDoc.CreateElement("node");
for (int i = 0; i < md.Reader.FieldCount; i++)
node.SetAttribute(md.Reader.GetName(i), md.Reader[i].ToString());
if (parentID > 0)
{
xmlDoc.SelectSingleNode(string.Format(@"//node[@ID='{0}']", md.Reader["ParentID"])).AppendChild(node);
}
else
{
xmlDoc.DocumentElement.AppendChild(node);
}
}
md.Close();
xmlDoc.Save(Server.MapPath("~/test.xml"));
最后生成的xml文件内容:
<root>
<node ID="1" ParentID="0" DeptName="软体研发处" LevelID="0" RoleID="0">
<node ID="2" ParentID="1" DeptName="软体研发一部" LevelID="0" RoleID="0">
<node ID="5" ParentID="2" DeptName="软体研发一部一课" LevelID="0" RoleID="0">
<node ID="11" ParentID="5" DeptName="AAA" LevelID="1" RoleID="1" />
<node ID="12" ParentID="5" DeptName="BBB" LevelID="1" RoleID="1" />
</node>
<node ID="6" ParentID="2" DeptName="软体研发一部二课" LevelID="0" RoleID="0" />
</node>
<node ID="3" ParentID="1" DeptName="软体研发二部" LevelID="0" RoleID="0">
<node ID="7" ParentID="3" DeptName="软体研发二部一课" LevelID="0" RoleID="0" />
<node ID="8" ParentID="3" DeptName="软体研发二部一课" LevelID="0" RoleID="0" />
</node>
<node ID="4" ParentID="1" DeptName="软体研发三部" LevelID="0" RoleID="0">
<node ID="9" ParentID="4" DeptName="软体研发三部一课" LevelID="0" RoleID="0" />
<node ID="10" ParentID="4" DeptName="软体研发三部二课" LevelID="0" RoleID="0" />
</node>
</node>
</root>
XmlDocument xmlDoc = new XmlDocument();
XmlElement root = xmlDoc.CreateElement("root");
xmlDoc.AppendChild(root);
OleDbData md = new OleDbData();
md.ExecuteReader("select * from tbDept");
while (md.Reader.Read())
{
XmlElement node = xmlDoc.CreateElement("node");
for (int i = 0; i < md.Reader.FieldCount; i++)
node.SetAttribute(md.Reader.GetName(i), md.Reader[i].ToString());
int parentID = Convert.ToInt32(md.Reader["ParentID"]);
if (parentID > 0)
xmlDoc.SelectSingleNode(string.Format(@"//node[@ID='{0}']", md.Reader["ParentID"])).AppendChild(node);
else
xmlDoc.DocumentElement.AppendChild(node);
}
md.Close();
xmlDoc.Save(Server.MapPath("~/test.xml"));
我把代码语句位置再调整一下,便于理解:C# codeXmlDocument xmlDoc = new XmlDocument();
XmlElement root = xmlDoc.CreateElement("root");
xmlDoc.AppendChild(root);
OleDbData md = ne……dalmeeme大哥,我想知道"xmlDoc.SelectSingleNode(string.Format(@"//node[@ID='{0}']", md.Reader["ParentID"])).AppendChild(node);”是什么意思?
不太明白是什么意思,我运行之后的结果好像输出的是ID的值1,“if(dv[i].Table.Select("[ParentId] = " + dv[i]["id"]).Length > 0)"这句话又怎么理解?若孟大哥有关注我的贴子望请赐教!!
把新生成的node节点,添加到ID=当前记录的ParentID的元素下面,做为其子节点。
string.Format(@"//node[@ID='{0}']", md.Reader["ParentID"])是什么意思?
我在网上查过string.Format(string,object)方法是把将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项
那小妹愚钝请问这名话:
string.Format(@"//node[@ID='{0}']", md.Reader["ParentID"])是什么意思?
然后这句话又放到了XMLDocument中的SelectSingerNode当中,这好像一环接着一环不知是什么意思?
这个http://dotnet.aspx.cc/file/Recursion-Genernate-XML.aspx路径是您给我参考的,其中有一段代码“DataRow[] dv = t.Select("[ParentId]=" + ParentId);”我用以下的代码:
DataRow[] dv = dt.Select("[ParentId]="+0);
for (int i = 0; i < dv.Length; i++)
{
Response.Write(dv[i][0]);
}
运行出来的结果输出的是ID的值1
那“if(dv[i].Table.Select("[ParentId] = " + dv[i]["id"]).Length > 0)" 中dv[i]["id"]是什么意思呢?怎么理解,请赐教!谢谢
这个http://dotnet.aspx.cc/file/Recursion-Genernate-XML.aspx路径是您给我参考的,其中有一段代码“DataRow[] dv = t.Select("[ParentId]=" + ParentId);”我用以下的代码:
DataRow[] dv = dt.Select("[ParentId]="+0);
for (int i = 0; i < dv.Length; i++)
{
Response.Write(dv[i][0]);
}
运行出来的结果输出的是ID的值1
DataRow[] dv = t.Select("[ParentId]=" + ParentId);
for (int i = 0; i < dv.Length; i++)
{
if (dv[i].Table.Select("[ParentId] = " + dv[i]["id"]).Length > 0)dv[i]["id"]是什么意思呢?它有值吗?请赐教!谢谢