sos求助!将datatable中数据特定格式输出成XML

Jason-Jin 2009-12-08 11:15:18
我在数据库中查询的数据存放到了datatable中,现在我想将datatable中的数据格式化成特定格式的XML
格式如下:<cun>
<node label="aS">
<node label="chushi(4)" Kind="09" node="01"/>
<node label="baojie(1)" Kind="09" node="02"/>
<node label="baoan(1)" Kind="09" node="03"/>
<node label="shuian(1)" Kind="09" node="04"/>
<node label="miandianshi(1)" Kind="09" node="05"/>
<node label="gongsineifuwuyuanyuan(80)" Kind="09" node="06"/>
</node>
<node label="Oa">
<node label="luruyuan(7)" Kind="10" node="01"/>
</node>
<node label="ganbu">
<node label="kaifabuchengxuyuan(14)" Kind="11" node="01"/>
<node label="kaifabuceshirenyuan(0)" Kind="11" node="02"/>
<node label="fsbuwangluoguanli(1)" Kind="11" node="03"/>
<node label="guanlibubaoan(1)" Kind="11" node="04"/>
<node label="guanlibuqiantai(0)" Kind="11" node="05"/>
<node label="fsbushebeiweihu(0)" Kind="11" node="06"/>
<node label="yunyongbuxitongjianshi(0)" Kind="11" node="07"/>
<node label="yunyongbupinzhidandang(1)" Kind="11" node="08"/>
<node label="qihuabushejizhuanyuan(0)" Kind="11" node="09"/>
<node label="qihuabusheyingzhuanyuan(0)" Kind="11" node="10"/>
<node label="qihuabuzhaopinzhuanyuan(0)" Kind="11" node="11"/>
</node>
</cun>
在说下,就是将databel中的数据,动态的格式化处上面的样子(datable中的数据也是动态查找处来的)又没有什么好办法
...全文
263 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnyliueei 2011-01-07
  • 打赏
  • 举报
回复
递归效率低 有更好的办法没
wzp144650 2009-12-08
  • 打赏
  • 举报
回复
手动操作DATATABLE生成XML
bandylau 2009-12-08
  • 打赏
  • 举报
回复
学习了
zetee 2009-12-08
  • 打赏
  • 举报
回复
.NET 2.0 比较麻烦。所以你要自己动手了
如果是3.5
用这个

从把表变成xml文件

var aa = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
new XElement("userSet",
from a in dc.Users
select new XElement("users",
new XElement("userid", a.UserID),
new XElement("userInfo", new XAttribute("userName", a.UserName), new XAttribute("userPwd", a.UserPassword)),
new XElement("usesFinished", a.IsFinished))));
aa.Save("bb.xml");

//结果bb.Xml:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<userSet>
<users>
<userid>1</userid>
<userInfo userName="admin" userPwd="888888" />
<usesFinished>0</usesFinished>
</users>
<users>
<userid>4</userid>
<userInfo userName="c" userPwd="34" />
<usesFinished>1</usesFinished>
</users>
<users>
<userid>5</userid>
<userInfo userName="fgh" userPwd="23" />
<usesFinished>0</usesFinished>
</users>
</userSet>
//Linq to XML 的资料很多,请找
zetee 2009-12-08
  • 打赏
  • 举报
回复
.NET 2.0 就只能创建xmlDoc 了

.Net 3.5 的话,就可以用Linq to XML
mbh0210 2009-12-08
  • 打赏
  • 举报
回复
根据你的规则操作xml
Jason-Jin 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zetee 的回复:]
datatable.DataSet.WriteXML(@"c:\aa.xml")
[/Quote]datatabel中的格式不是这样的,我是想将里面内容写成这样的格式
zetee 2009-12-08
  • 打赏
  • 举报
回复
datatable.DataSet.WriteXML(@"c:\aa.xml")
Jason-Jin 2009-12-08
  • 打赏
  • 举报
回复
//数据库返回的Datatable
DataTable tb = db.ExecuteDataTable("Select * from 编码表");
//创建xml文档对象
XmlDocument doc = new XmlDocument();
//xml头
doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null)); //声明
//根元素
doc.AppendChild(doc.CreateElement("root")); //根节点
//用于存放临时数据的xml元素数组
XmlElement[] menu = new XmlElement[tb.Rows.Count];
for (int i = 0; i < tb.Rows.Count; i++)
{
DataRow r = tb.Rows[i];
//创建一个xml元素并放到文档的根目录下
menu[i] = doc.CreateElement("c" + r["code"].ToString().Replace(".", "")); ; //元素名: c+code
menu[i].SetAttribute("code", r["code"].ToString());//代码
menu[i].SetAttribute("name", r["name"].ToString()); //名称
menu[i].SetAttribute("parentCode", r["parentCode"].ToString()); //父代码
menu[i].SetAttribute("hierarchy", r["hierarchy"].ToString()); //深度
doc.DocumentElement.AppendChild(menu[i]);
}
//重新排列xml所有节点的位置
for (int i = 0; i < menu.Length; i++)
{
if (menu[i].Attributes["hierarchy"].Value != "1") //深度为一的不需要移动,也就是总目录
{
//移动元素,复制一个到父节点下并删除当前元素
//根据当前元素判断父元素的元素名
string parentNodeName = "c" + menu[i].Attributes["parentCode"].Value;
string xpath = string.Format("//{0}[@code={1}]", parentNodeName, menu[i].Attributes["parentCode"].Value);

doc.DocumentElement.SelectSingleNode(xpath).AppendChild(menu[i].Clone());
menu[i].ParentNode.RemoveChild(menu[i]);

}

}
//现在的xml表现为:
//<?xml version="1.0" encoding="utf-8" ?>
//<root>
//<c01 code="01" name="政治" parentCode="" hierarchy="1">
//<c0101 code="01.01" name="国家概况" parentCode="01" hierarchy="2">
//<c010101 code="01.01.01" name="政治体制" parentCode="01.01" hierarchy="3">
//<c01010102 code="01.01.01.02" name="领导体制" parentCode="01.01.01" hierarchy="4"> </c01010102>
//</c010101>
//</c0101>
//</c01>
//<c02 code="02" name="选举制" parentCode="" hierarchy="1">
//... ....... . . .
//</c02>
//</root>
//你可以自己再把多余的属性删掉
我找到了办法,给大家参考,也谢谢了
woshifou 2009-12-08
  • 打赏
  • 举报
回复
学习。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧