c# 将数据导出成指定xml格式
数据库表的格式是
PROVINCE CITY COUNTRY TOWN
湖南 衡阳市 耒阳市 竹市镇
湖南 衡阳市 耒阳市 夏塘镇
湖南 郴州市 嘉禾县 车头镇
湖南 郴州市 嘉禾县 塘村镇
湖南 郴州市 安仁县 洋际乡
湖南 郴州市 资兴市 唐洞街道
湖南 郴州市 资兴市 滁口镇
湖南 郴州市 资兴市 鲤鱼江镇
输出的xml格式希望是(注意里面的从属关系)
<address>
<province name="湖南">
<city name="郴州市">
<country name="安仁县">
<town name="洋际乡" />
</country>
<country name="嘉禾县">
<town name="车头镇" />
<town name="塘村镇" />
</country>
<country name="资兴市">
<town name="滁口镇" />
<town name="鲤鱼江镇" />
<town name="唐洞街道" />
</country>
</city>
<city name="衡阳市">
<country name="耒阳市">
<town name="夏塘镇" />
<town name="竹市镇" />
</country>
</city>
</province>
</address>
rocky_wl提到的方法我试过了,但是循环很难控制,出现了很多的重复,而且数据行多一点就基本生成不出来,计算量过大。
能否给出代码让我参考一下呢? 展开
Dataset的WriteXml是按记录一条一条的写成XML,对应的,不可能给你写成分省市的,必须要自己写循环判断,自己构造xml
用select * from [TableName] order by PROVINCE, CITY, COUNTRY, TOWN这条语句查询出结果,这样记录是按省市乡镇依次排列的,读到DataTable里,再循环读取,当前记录与前一条记录进行比对,如果省市乡都一样就追加“<town name="" /> ”,如果省市一样,追加<country>,如果只是省一样,追加<city>,全部遍历一遍,构造xml字符串即可。
补充:
protected void WriteXML()
{
DataTable dt = new YourClass().YourMethod();//你的类.你的方法
string str = "<address>";
for (int i = 0; i < dt.Rows.Count; i++)
{
if (i == 0)
{
str += "<province name=\"" + dt.Rows[i]["Province"].ToString() + "\">" +
"<city name=\"" + dt.Rows[i]["City"].ToString() + "\">" +
"<country name=\"" + dt.Rows[i]["Country"].ToString() + "\">" +
"<town name=\"" + dt.Rows[i]["Town"].ToString() + "\" />";
}
else
{
if (dt.Rows[i]["Province"].ToString() == dt.Rows[i - 1]["Province"].ToString() &&
dt.Rows[i]["City"].ToString() == dt.Rows[i - 1]["City"].ToString() &&
dt.Rows[i]["Country"].ToString() == dt.Rows[i - 1]["Country"].ToString())
{
str += "<town name=\"" + dt.Rows[i]["Town"].ToString() + "\" />";
}
else if (dt.Rows[i]["Province"].ToString() == dt.Rows[i - 1]["Province"].ToString() &&
dt.Rows[i]["City"].ToString() == dt.Rows[i - 1]["City"].ToString())
{
str += "</country>";
str += "<country name=\"" + dt.Rows[i]["Country"].ToString() + "\">" +
"<town name=\"" + dt.Rows[i]["Town"].ToString() + "\" />";
}
else if (dt.Rows[i]["Province"].ToString() == dt.Rows[i - 1]["Province"].ToString())
{
str += "</country>";
str += "</city>";
str += "<city name=\"" + dt.Rows[i]["City"].ToString() + "\">" + "<country name=\"" + dt.Rows[i]["Country"].ToString() + "\">" +
"<town name=\"" + dt.Rows[i]["Town"].ToString() + "\" />";
}
else
{
str += "</province>";
}
if (i == dt.Rows.Count - 1)
{
str += "</country>";
str += "</city>";
str += "</province>";
}
}
}
str += "</address>";
}
结果如图
说明:只支持一个省的,要是多个省的你再稍做改动