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

该博客介绍了如何使用C#将数据集转换为特定XML格式,通过遍历DataTable,对比每条记录的省、市、县信息,动态构造XML结构。代码示例展示了如何逐条检查并根据变化插入相应的XML标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

结果如图
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>";
    }

结果如图


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值