诚心请教各位大侠,如何将数据库里的表生成如2中XML文件的样式
1.数据库里的表
iSysCode cName iCode
1 安徽 10
2 北京 11
3 福建 12
4 甘肃 13
5 广东 14
6 广西 15
.....................
2.XmL文件
<?xml version="1.0" encoding="utf-8" ?>
<Position>
<province name="山东">
<city name="青岛">
<area name="市南区" />
<area name="市北区" />
<area name="莱西" />
</city>
<city name="济南">
<area name="历下区" />
<area name="历城区" />
</city>
<city name="烟台">
<area name="莱阳" />
<area name="福山区" />
</city>
</province>
<province name="辽宁">
<city name="沈阳">
<area name="法库县" />
<area name="辽中县" />
<area name="沈阳市" />
</city>
<city name="大连">
<area name="长海县" />
<area name="大连市" />
</city>
<city name="本溪">
<area name="本溪市" />
<area name="桓仁满族自治县" />
</city>
</province>
</Position>
1.数据库里的表
iSysCode cName iCode
1 安徽 10
2 北京 11
3 福建 12
4 甘肃 13
5 广东 14
6 广西 15
.....................
2.XmL文件
<?xml version="1.0" encoding="utf-8" ?>
<Position>
<province name="山东">
<city name="青岛">
<area name="市南区" />
<area name="市北区" />
<area name="莱西" />
</city>
<city name="济南">
<area name="历下区" />
<area name="历城区" />
</city>
<city name="烟台">
<area name="莱阳" />
<area name="福山区" />
</city>
</province>
<province name="辽宁">
<city name="沈阳">
<area name="法库县" />
<area name="辽中县" />
<area name="沈阳市" />
</city>
<city name="大连">
<area name="长海县" />
<area name="大连市" />
</city>
<city name="本溪">
<area name="本溪市" />
<area name="桓仁满族自治县" />
</city>
</province>
</Position>
解决方案 »
- 计算成绩时怎样调用数组lt.Add(tID1)
- 关于数据的保存
- 一个简单的小问题.怎么样在page_load事件里判断是哪一个按钮触发的事件.
- 大家帮我改正两个从asp.net 1.1 移植到 asp.net 2.0 的错误??
- 求助,哪为大哥给个购物车的原码
- 请问怎么让studio 2003 代码界面显示行数啊?
- 【AspNet_RegIis.exe】不是大神就别进来了
- 为什么出错呢?高手请进!
- 输出word文件的问题---思归等高手快来!!!!!!!!!
- 一个关于DataSet得问题,急
- E.Item.Cells[1].Text.ToString()的问题
- asp.net如何调用access中类似于sql的存储过程?
======省份=======
1 安徽 10
=======市==========
35 安庆 1001
36 蚌埠 1002========区县===========
404 安庆市 100101
405 怀宁县 100102
406 潜山县 100103
407 宿松县 100104
408 太湖县 100105
409 桐城市 100106
{
public string icode;
public string cname;
}DataView dvCity=ds.Tables[0].DefaultView;dvCity.RowFilter="len(icode)=2"
ArrayList list=new ArrayList();
foreach(DataRowView drv in dvCity)
{
Province p=new Province();
p.icode=drv["icode"].ToString();
p.cname=drv["cname"].ToString()
list.Add(p);}string str="";
foreach(Province prov in list)
{
str+=String.Format("<province name=\"{0}\" >",prov.cname);
dvCity.RowFilter="icode like '"+prov.icode+"%'";
foreach(DataRowView drv in dvCity)
{
///写城市信息到字符串.
} }
{
foreach(城市表...)
{
xml += "...";
}
}
拼字符串最好用StringBuilder,直接拼字符串会用大量中间变量,效率极低
======================================
别站着说话不腰疼,有种你写一个看看,别干什么都想当然,写出来才是真本事。估计你Y的连要求都没明白就在这狂吠,你还是自己找个地凉快地吧!!!
/*
RetrieveXML ''//执行这句
*/
alter Procedure RetrieveXML
(
@iParentCode int
)
AS
declare @cName varchar(50)
declare @iCode intif Len(@iParentCode) = 1 Begin
declare curProvince cursor for
select cName, iCode from CommonArea
where len(iCode)= 2 OPEN curProvince FETCH NEXT FROM curProvince
INTO @cName, @iCode while @@FETCH_STATUS=0 Begin
print '<Province name="'+@cName+'">'
exec('RetrieveXML ''' + @iCode + '''')
Print '</Province>' FETCH NEXT FROM curProvince
INTO @cName, @iCode
End close curProvince
DEALLOCATE curProvince
End
Else if Len(@iParentCode) = 2 Begin
declare curCity cursor for
select cName, iCode from CommonArea
where len(iCode)=len(@iParentCode) + 2
and left(iCode, len(@iParentCode)) = @iParentCode OPEN curCity FETCH NEXT FROM curCity
INTO @cName, @iCode while @@FETCH_STATUS=0 Begin
print '<City name="'+@cName+'">'
exec('RetrieveXML ''' + @iCode + '''')
Print '</City>'
FETCH NEXT FROM curCity
INTO @cName, @iCode
End close curCity
DEALLOCATE curCity
End
Else if Len(@iParentCode) = 4 Begin
declare curArea cursor for
select cName, iCode from CommonArea
where len(iCode)=len(@iParentCode) + 2
and left(iCode, len(@iParentCode)) = @iParentCode OPEN curArea FETCH NEXT FROM curArea
INTO @cName, @iCode while @@FETCH_STATUS=0 Begin
print '<Area name="'+@cName+'" />' FETCH NEXT FROM curArea
INTO @cName, @iCode
End close curArea
DEALLOCATE curArea
End
viena说的对,其实每个人的星星都不知道帮了多少人.不是你说的那样using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Xml;public class MyClass
{
public static void Main()
{
try{
DataTable dt=CreateTable();
dt.Columns.Add(new DataColumn("iParentCode",typeof(string)));
//加入父iCODE
foreach(DataRow dr in dt.Rows){
dr["iParentCode"]= dr["iCode"].ToString().Substring(0,dr["iCode"].ToString().Length-2);
}
//加入根在最后一行
dt.Rows.Add(0,"Position","",null);
//建立数据集
DataSet ds=new DataSet();
ds.Tables.Add(dt);
//建立关联
DataRelation relation=new DataRelation("pc",dt.Columns["iCode"],dt.Columns["iParentCode"]);
ds.Relations.Add(relation);
DataRow RootRow=dt.Rows[dt.Rows.Count-1];
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create("e:\\test.xml", settings)) {
writexml(writer,RootRow,relation);
}
}
catch(Exception e){
Console.WriteLine(e.ToString());
}
finally{
Console.Read();
}
}
static void writexml(XmlWriter writer,DataRow dr,DataRelation relation ){
string Key="NONE";
string iCode=dr["iCode"].ToString();
switch(iCode.Length){
case 0:
Key="Position";
break;
case 2:
Key="province";
break;
case 4:
Key="city";
break;
case 6:
Key="area";
break;
}
writer.WriteStartElement(Key);
if(iCode.Length>0){
writer.WriteStartAttribute("name");
writer.WriteValue(dr[1].ToString());
writer.WriteEndAttribute();
}
foreach(DataRow dr1 in dr.GetChildRows(relation)){
writexml(writer,dr1,relation);
}
writer.WriteEndElement();
}
static DataTable CreateTable(){
DataTable dt=new DataTable();
dt.Columns.Add(new DataColumn("iSysCode ",typeof(int)));
dt.Columns.Add(new DataColumn("cName",typeof(string)));
dt.Columns.Add(new DataColumn("iCode",typeof(string)));
dt.Rows.Add(1,"安徽","10");
dt.Rows.Add(2,"安徽","20");
dt.Rows.Add(35,"安庆","1001");
dt.Rows.Add(36,"蚌埠","1002");
dt.Rows.Add(404,"安庆市","100101");
dt.Rows.Add(405,"怀宁县","100102");
return dt;
}
}
<?xml version="1.0" encoding="utf-8"?>
<Position>
<province name="安徽">
<city name="安庆">
<area name="安庆市" />
<area name="怀宁县" />
</city>
<city name="蚌埠" />
</province>
<province name="安徽" />
</Position>