把数据表中的记录导出成下面XML格式的文件:<?xml version=1.0 ?>
<data>
<detail>
<count>3</count>
<row1>
<industry>钢铁</industry>
<zhsl>20892</zhsl>
<zhje>23680</zhje>
<zhzb>0.35</zhzb>
<cksl>12382</cksl>
<ckje>87732</ckje>
<ckzb>0.24</ckzb>
<dksl>9822</dksl>
<dkje>2302</dkje>
<dkzb>0.41</dkzb>
</row1>
<row2>
<industry>机械</industry>
<zhsl>10922</zhsl>
<zhje>68012</zhje>
<zhzb>0.65</zhzb>
<cksl>3828</cksl>
<ckje>9723</ckje>
<ckzb>0.46</ckzb>
<dksl>2922</dksl>
<dkje>12302</dkje>
<dkzb>0.19</dkzb>
</row2>
<row3>
<industry>医药制造</industry>
<zhsl>9292</zhsl>
<zhje>72312</zhje>
<zhzb>0.95</zhzb>
<cksl>9828</cksl>
<ckje>1243</ckje>
<ckzb>0.27</ckzb>
<dksl>2093</dksl>
<dkje>6622</dkje>
<dkzb>0.49</dkzb>
</row3>
</detail>
</data>请问有没有方法用C#程序来写??
我把表中的数据写到一个DATASET里,再用ds.WriteXml()导出,但是格式不对,好郁闷啊!!
大家帮帮我吧(新人)

解决方案 »

  1.   

    这个问题到 .net 板块肯定有人知道的
      

  2.   

    XML文档实例:
    <? xml version="1.0" encoding="gb2132" ?>
    <recode>
    <person>
    <name>jay</name>
    <tel country="001" city="01">123</tel>
    </person>
    <person>
    <name>ken</name>
    <tel country="" city="02">456</tel>
    </person>
    </recode>.NET模拟实现SAXSAX(Simple Application for XML)是XML的另外一种程序接口,与DOM相比,有自己的优势和劣势:
    ·当文档很大的时候,使用DOM会占用很大的空间,比如,100K的文档要占用1M的空间。而SAX则几乎不需要额外的空间。在处理较大的文档时,SAX体现了它最大的优势。
    ·不必解析整个文档, 在只需小部分内容的时候可以节省系统资源。
    ·不能做随机访问,只能向后地读取文档信息。
    ·大文档读取速度不如DOM。
    ·对于复杂的搜索不能胜任。
    具体操作using System;
    using System.Xml;
    using System.Text;
    using System.IO;
    namespace xml_sax
    {
      class Class1
    {
      /// <summary>
      /// 应用程序的主入口点。
      /// </summary>
      [STAThread]
      static void Main()
      {
      ReadXml();//读取文档
      WriteXml();//写文档
    //要添加的数据:
      Data data = new Data ();
    data.Name = "Bill";
    data.Tel = "678";
    data.City = "003";
    AddXml(data);//添加一个数据
    Console.WriteLine ("the 2nd read:");
    ReadXml();
    }
    static void GetAttr(XmlReader reader)//读取一个节点及它的属性
    {
    string name;
    name = reader.Name ;//当前节点的名称
    for(int i=0;i<reader.AttributeCount /*属性的个数/*;i++)
    {
    reader.MoveToNextAttribute();//移动到下一个属性
    Console.WriteLine("attr:{0}:{1}",
    reader.Name,reader.Value/*当前节点的值*/ );
    }
    reader.Read ();//读取下一个节点
    Console.WriteLine("{0}:{1}",name ,reader.Value);
    }
    static void ReadXml()
    {
    //建立读文档对象:
    XmlTextReader reader = new XmlTextReader ("d:\\person.xml");
    while ( reader.Read())//逐个读取节点
    {
    if(reader.NodeType ==XmlNodeType.Element /*指定节点类型为元素*/)
    //可以读所有的节点,包括根结点recode
    {
    switch(reader.Name)
    {
    case "name":
    GetAttr(reader);//读取节点内容
    break;
    case "tel" :
    GetAttr(reader);
    break;
    }
    }
    if (reader.NodeType == XmlNodeType.EndElement//元素尾类型
     && reader.Name == "person")
    //到此读完一条数据
    {
    Console.WriteLine ("_________________________________");
    }
    }
    reader.Close();//关闭文档
    }
    static void WriteXml()
    //此过程从person.xml读数据,写到person1.xml中
    {
    //建立读写对象:
    XmlTextReader reader = new XmlTextReader("d:\\person.xml");
    XmlTextWriter writer = new XmlTextWriter("d:\\person1.xml",
    Encoding.UTF8);
    writer.Formatting = Formatting.Indented ;//设置写入的格式为锯齿型
    writer.WriteStartDocument (); //写入文档第一行的XML说明
    while(reader.Read ())
    {
                     if(reader.NodeType == XmlNodeType.Element )
    {
    writer.WriteStartElement (reader.Name);//如:<name>
    //写入节点的所有属性:
    writer.WriteAttributes (reader,true);
    }
    else if (reader.NodeType == XmlNodeType.EndElement )
    {
    writer.WriteEndElement ();//如;</name>
    }
    else if(reader.NodeType == XmlNodeType.Text /*文本型*/ )
    {
    writer.WriteString (reader.Value);//写入值
    }
    }
    reader.Close ();
    writer.Close ();
    }
    static void AddXml(Data data)
    {
    /*添加的方法和C语言中顺序文件的删除方法很相似,
              是将原文件中的数据逐一写到临时文件中,然后
      在适当的位置写入新数据                    */
    XmlTextReader reader = new XmlTextReader("d:\\person.xml");
    XmlTextWriter writer = new XmlTextWriter("d:\\person1.xml",
    Encoding.UTF8);
    writer.Formatting = Formatting.Indented ;
    writer.WriteStartDocument (); 
    while(reader.Read ())
    {
    switch(reader.NodeType )
    {
    case XmlNodeType.Element:
    writer.WriteStartElement (reader.Name );
        writer.WriteAttributes (reader,true);
    break;
    case XmlNodeType.EndElement :
    if (reader.Name == "recode")
    在文档的末尾加入数据:
    {
    writer.WriteStartElement ("person");
    //写入一个元素:
    writer.WriteElementString("name",data.Name);
    writer.WriteStartElement("tel");
    //写入一个属性
    writer.WriteAttributeString
    ("country",data.Country);
    writer.WriteAttributeString("city",data.City);
    writer.WriteString (data.Tel);
    writer.WriteEndElement();
    writer.WriteEndElement(); 
    }
    writer.WriteEndElement ();
    break;
    case  XmlNodeType.Text :
    writer.WriteString (reader.Value );
    break;
    }
    }
    reader.Close ();
    writer.Close ();
    //用原文件名替换临时文件名
    File.Copy ("d:\\person1.xml","d:\\person.xml",true);
    File.Delete ("d:\\person1.xml");//删除临时文件 }
    }
    class Data//数据类
    {
    public Data()
    {
    }
    public string Name = "",
    Tel = "",
    Country = "",
    City = "";
    }
    }
    输出结果:name:jay
    attr:country:001
    attr:city:01
    tel:123
    _____________________________
    name:ken
    attr:country:
    attr:city:02
    tel:456
    _____________________________
    the 2nd read:
    name:jay
    attr:country:001
    attr:city:01
    tel:123
    _____________________________
    name:ken
    attr:country:
    attr:city:02
    tel:456
    _____________________________
    name:Bill
    attr:country:003
    attr:city:03
    tel:678
    _____________________________person.xml:<?xml version="1.0" encoding="utf-8"?>
    <recode>
      <person>
        <name>jay</name>
        <tel country="001" city="01">123</tel>
      </person>
      <person>
        <name>ken</name>
        <tel country="" city="02">456</tel>
      </person>
      <person>
        <name>Bill</name>
        <tel country="" city="003">678</tel>
      </person>
    </recode>
      

  3.   

    WriteXml()导出是一种固定格式, 
    你想要自己的格式,C#有专们写XML的类库~
      

  4.   

    如果是sql server使用查询语句直接生成就行了,
    查询语句参考,
    http://blog.csdn.net/zhzuo/archive/2005/06/28/406290.aspx
    调用SqlCommand.ExecuteXmlReader 方法来执行.