我的数据结构是这样的 :
tid bid bname sid sname
0 100 b1 1000 s1
0 100 b1 1001 s2
0 100 b1 1002 s3
0 100 b1 1003 s4
0 100 b1 1004 s5
0 101 b2 1005 s6
0 101 b2 1006 s7
1 102 b3 1007 s8
1 102 b3 1008 s9
1 103 b4 1009 s10
..................
最后要变成
<menu>
<T0>
<B100 bname= "b1 ">
<S1000> s1 </S1000>
<S1001> s2 </S1001>
<S1002> s3 </S1002>
<S1003> s4 </S1003>
<S1004> s5 </S1004>
</B100>
<B101 bname= "b2 ">
<S1005> s6 </S1005>
<S1006> s7 </S1006>
</B101>
</T0>
<T1>
<B102 bname= "b3 ">
<S1007> s8 </S1007>
<S1008> s9 </S1008>
</B102>
<B103 bname= "b4 ">
<S1009> s10 </S1000>
.......
</B103>
....
</T1>
......
</menu>
想用XmlDocument 结合 XPathVavigator 来进行转换。
原来的程序是这样的,但是有问题出现,详见 http://topic.csdn.net/u/20080922/10/3cf9ed36-3a8b-493a-8313-35291531db45.html?seed=985537187
请各位帮忙指点改正
tid bid bname sid sname
0 100 b1 1000 s1
0 100 b1 1001 s2
0 100 b1 1002 s3
0 100 b1 1003 s4
0 100 b1 1004 s5
0 101 b2 1005 s6
0 101 b2 1006 s7
1 102 b3 1007 s8
1 102 b3 1008 s9
1 103 b4 1009 s10
..................
最后要变成
<menu>
<T0>
<B100 bname= "b1 ">
<S1000> s1 </S1000>
<S1001> s2 </S1001>
<S1002> s3 </S1002>
<S1003> s4 </S1003>
<S1004> s5 </S1004>
</B100>
<B101 bname= "b2 ">
<S1005> s6 </S1005>
<S1006> s7 </S1006>
</B101>
</T0>
<T1>
<B102 bname= "b3 ">
<S1007> s8 </S1007>
<S1008> s9 </S1008>
</B102>
<B103 bname= "b4 ">
<S1009> s10 </S1000>
.......
</B103>
....
</T1>
......
</menu>
想用XmlDocument 结合 XPathVavigator 来进行转换。
原来的程序是这样的,但是有问题出现,详见 http://topic.csdn.net/u/20080922/10/3cf9ed36-3a8b-493a-8313-35291531db45.html?seed=985537187
请各位帮忙指点改正
解决方案 »
- 关于DataContractJsonSerializer的问题
- 线程,求教求教
- c#如何做到预览时有表格线,打印时去掉表格式,只打数据。
- string.format格式
- datagridview控件使用问题。高手请进
- radiobutton 存入数据库的问题
- DataGrid新增列声明类型问题
- TreeView 树控件中对某个节点当选中时旁边出现一个按钮,点击删除对应该节点的数据库内容
- 如何按成绩来得到班级排名?
- 散分,求指导思想的BLOG,!!!!(建议置顶)
- 关于一些算法问题,求助正宗高手!!
- 灌水机,登陆成功后,提交表单,提示没有找到网页,其中key我以获取成功,比添加到提交的表单中,不知道还有那种原因使我提交的表单无法被接受??
SqlResult rs = sp.CallNoParam();
DataTable dt = rs.dataSet.Tables[0];
int rowsnum = dt.Rows.Count; XmlDocument doc = new XmlDocument();
doc.LoadXml("menu");
foreach (DataRow row in dt.Rows)
{
string tidstr = "T" + row["tid"].ToString();
string bidstr = "B" + row["bid"].ToString();
string sidstr = "S" + row["sid"].ToString();
string bname = row["bname"].ToString();
string sname = row["sname"].ToString(); XmlElement element = null;
bool exist = false;
XmlNodeList nodeList = doc.GetElementsByTagName(tidstr);
if (nodeList != null && nodeList.Count > 0)
{
element = (XmlElement)nodeList[0];
exist = true;
}
else
{
element = doc.CreateElement(tidstr);
}
XmlElement bIdElement = null;
bool bExist = false;
if (exist)
{
XmlNodeList bList = element.GetElementsByTagName(bidstr);
if (bList != null && bList.Count > 0)
{
bIdElement = (XmlElement)bList[0];
bExist = true;
}
else
{
bIdElement = doc.CreateElement(bidstr);
bIdElement.SetAttribute("bname", bname);
} }
else
{
bIdElement = doc.CreateElement(bidstr);
bIdElement.SetAttribute("bname", bname);
}
XmlElement sIdElement = doc.CreateElement(sidstr);
sIdElement.InnerText = sname;
element.AppendChild(sIdElement); if (!bExist)
{
element.AppendChild(bIdElement);
}
if (!exist)
{
doc.DocumentElement.AppendChild(element);
}
} doc.Save("filepath");
定义一个对应表的类,读出数据库中的内容到该类数组中
定义一个xmldocument,初始化为"<menu></menu>"
foreach 每个数据项
判断是否有//menu/ + T + tid节点
没有添加
判断是否有//menu/ + T + tid/ + B + bid节点
没有添加
判断是否有//menu/ + T + tid/ + B + bid/ + S + sid节点
没有添加
设想就是这样,我主要是实现的过程中出现了异常,不知道问题在哪。To wang4237:
感谢你费心提供了代码,不过我还是想采用 想用XmlDocument 结合 XPathVavigator 来进行转换。
这样可能程序结构要简单明晰些。
谢谢大家帮助!