c# 将数据导出成指定xml格式

求一段代码,将数据导出成指定格式的xml,如果需要用到其他的东西如xsd文件请一并给出,谢谢!数据库表的格式是PROVINCECITYCOUNTRYTOWN湖南衡阳市耒阳... 求一段代码,将数据导出成指定格式的xml,如果需要用到其他的东西如xsd文件请一并给出,谢谢!
数据库表的格式是
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提到的方法我试过了,但是循环很难控制,出现了很多的重复,而且数据行多一点就基本生成不出来,计算量过大。
能否给出代码让我参考一下呢?
展开
 我来答
rocky_wl
推荐于2016-03-15 · TA获得超过180个赞
知道答主
回答量:199
采纳率:0%
帮助的人:157万
展开全部

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>";

    }

结果如图

说明:只支持一个省的,要是多个省的你再稍做改动

yaobing0687
2010-03-31 · TA获得超过988个赞
知道小有建树答主
回答量:1309
采纳率:0%
帮助的人:891万
展开全部
从数据库读取到DataSet里,用Dataset的WriteXml写出来就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式