可以先填充DataSet,然后使用DataSet.GetXml()可以得到xml字符串,DataSet.WriteXml()可以写xml文件

解决方案 »

  1.   

    根据表的结构进行递归循环
    xml是树形的,比较好操作//创建一个xml文档对象,根节点是root
    XmlDocument doc = new XmlDocument();
    doc.LoadXml( "<?xml version='1.0' ?><root />" );doc[ "root" ].AppendChild( doc.CreateElement( "一级1" ) )
    doc[ "root" ].AppendChild( doc.CreateElement( "一级2" ) );doc[ "root" ][ "一级1" ].AppendChild( doc.CreateElement( "二级1" ) );
    ...
      

  2.   

    如用DataSet来填充,其中读出的级别关系怎么来处理呢
      

  3.   

    既然你有这样的层次关系,那还是手动添加node。
      

  4.   

    我现在这里读出了三级的数据??
    这方面 我不熟呀。。
    下面有个例子,是孟子的。
    把ADO记录集转换成XML
    http://dev.csdn.net/develop/article/13/13753.shtm
      

  5.   

    上面的是用VB。NET在C#里怎么实现根据数据库的数据生成一个XML文件?
    http://search.csdn.net/Expert/topic/878/878746.xml?temp=.8260919
      

  6.   

    1. XML 文档操作 
      1.1 加载一个XML文档 
      Dim objDoc As New XmlDocument() 
      '-- Load xml document Sample.xml 
      objDoc.Load("Sample.xml") 
       
      1.2 加载一个XML数据 
       Dim objDoc As New XmlDocument() 
       Dim strXML As String 
       strXML = "<Employees><Employee id=”12345”><Employee_ID>12345</Employee_ID><Name>Zhang Bin</Name></Employee></Employees>" 
       
       '-- Load xml data 
       objDoc.Load(strXML) 
       
      1.3 保存文档 
      '—Save xml document 
      objDoc.Save("Sample.xml") 
       
      2 XML 数据的查询 
      最常见的XML数据类型有:Element, Attribute,Comment, Text. 
      Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference. 
      Attribute, 指在<Employee id=”12345”>中的粗体部分。 
      Comment,指形如:<!-- my comment --> 的节点。 
      Text,指在<Name>Tom<Name>的粗体部分。 
      在XML中,可以用XmlNode对象来参照各种XML数据类型。 
      2.1 查询已知绝对路径的节点(集) 
      objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee”) 
      或者 
      objNodeList = objNode.SelectNodes(“/Company/Department/Employees/Employee”) 
      以上两种方法可返回一个NodeList对象,如果要返回单个节点可使用SelectSingleNode方法,该方法如果查询到一个或多个节点,返回第一个节点;如果没有查询的任何节点返回 Nothing。例如: 
      objNode = objNode.SelectSingleNode(“/Company/Department/Employees/Employee”) 
      If Not (objNode is Nothing) then 
       ‘- Do process 
      End If 
      2.2 查询已知相对路径的节点(集) 
      可使用类似于文件路径的相对路径的方式来查询XML的数据 
      objNode = objDoc.SelectSingleNode(“Company/Department”) 
      objNodeList = objNode.SelectNodes(“../Department) 
      objNode = objNode.SelectNode(“Employees/Employee”) 
      2.3 查询已知元素名的节点(集) 
      在使用不规则的层次文档时,由于不知道中间层次的元素名,可使用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素。例如: 
      objNodeList = objDoc.SelectNodes(“Company//Employee”) 
      2.4 查询属性(attribute)节点 
      以上的各种方法都返回元素(element)节点(集),返回属性(attribute),只需要采用相应的方法,在属性名前加一个@符号即可,例如: 
      objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee/@id”) 
      objNodeList = objDoc.SelectNodes(“Company//@id”) 
      2.5 查询Text节点 
      使用text()来获取Text节点。 
      objNode = objDoc.SelectSingleNode(“Company/Department/Deparmt_Name/text()”) 
      2.6 查询特定条件的节点 
      使用[]符号来查询特定条件的节点。例如: 
      a. 返回id号为 10102的Employee节点 
       objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee[@id=’10102’]”) 
      b. 返回Name为Zhang Qi的Name 节点 
       objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee/Name[text()=’Zhang Qi’]”) 
      c. 返回部门含有职员22345的部门名称节点 
      objNode = objDoc.SelectSingleNode("Company/Department[Employees/Employee/@id='22345']/Department_Name") 
      2.7 查询多重模式的节点 
      使用 | 符号可以获得多重模式的节点。例如: 
      objNodeList = objDoc.SelectNodes(“Company/Department/Department_Name | Company/Department/Manager”) 
      2.8 查询任意子节点 
      使用*符号可以返回当前节点的所有子节点。 
      objNodeList = objDoc.SelectNodes(“Company/*/Manager) 
      或者 
      objNodeList = objNode.ChildNodes 
      

  7.   

    这个新类有一个Read方法,它是对Reader的read方法的一个简单的封装。另外,它提供了WriterStartDocument和WriteEndDocument方法。它们分别初始化/释放(finalize)了内部Reader和writer对象,还处理所有I/O操作。在循环读节点的同时,我们就可以直接的修改节点。出于性能的原因,要修改属性必须先用AddAttributeChange方法声明。对一个节点的属性所作的所有修改都会存放在一个临时的表中,最后,通过调用WriteAttribute方法提交修改,清除临时表。 
       
      图十二所示的代码演示了客户端用XmlTextReadWriter类在读操作的同时修改属性值的优势。在本期的msdn中提供了XmlTextReadWriter类的C#和VB源代码下载(见本文开头提供的链接)。 
      Figure 12 Changing Attribute Values 
       
      private void ApplyChanges(string nodeName, string attribName, 
       
       string oldVal, string newVal) 
       
      { 
       
       XmlTextReadWriter rw = new XmlTextReadWriter(InputFileName.Text, 
       
       OutputFileName.Text); 
       
       rw.WriteStartDocument(true, CommentText.Text); 
       
       
       
       // 手工修改根节点 
       
       rw.Writer.WriteStartElement(rw.Reader.LocalName); 
       
       
       
       // 开始修改属性 
       
       // (可以修改更多节点的属性) 
       
       rw.AddAttributeChange(nodeName, attribName, oldVal, newVal); 
       
       
       
       // 循环处理文档 
       
       while(rw.Read()) 
       
       { 
       
       switch(rw.NodeType) 
       
       { 
       
       case XmlNodeType.Element: 
       
       rw.Writer.WriteStartElement(rw.Reader.LocalName); 
       
       if (nodeName == rw.Reader.LocalName) 
       
       // 修改属性 
       
       rw.WriteAttributes(nodeName); 
       
       else 
       
       // deep copy 
       
       rw.Writer.WriteAttributes(rw.Reader, false); 
       
       
       
       if (rw.Reader.IsEmptyElement) 
       
       rw.Writer.WriteEndElement(); 
       
       break; 
       
       } 
       
       } 
       
       
       
       // Close the root tag 
       
       rw.Writer.WriteEndElement(); 
       
       
       
       // Close the document and any internal resources 
       
       rw.WriteEndDocument(); 
       
      } 
       
       
       
      XmlTextReadWriter类不仅可以读XML文档,也可以写XML文档。你可以它来读XML文档的内容,如果需要,你还可以用它来做一些基本的更新操作。基本的更新操作在这里是指修改某个已存在的属性的值或者某个节点的内容,又或者是增加一个新的属性或节点。对于更复杂的操作,最好还是用XMLDOM分析器。 
      

  8.   

    填充进DataSet,然后用DataSet.GetXml()可以得到xml字符串,DataSet.WriteXml()可以写xml文件
      

  9.   

    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<?xml version='1.0' ?><root />");
    SqlComm.CommandText = "select cars_code,code_name from t_cars_code where cars_code like '%100__0000%'";
    SqlComm.Connection.Open();
    SqlDR = SqlComm.ExecuteReader();
    while(SqlDR.Read())
    {
      System.Xml.XmlNode node = new XmlNode();
      code_name = SqlDR["code_name"].ToString();
      node.Value = code_name;
      node.Attributes["ID"].Value = SqlDR["cars_code"].ToString();
      doc["root"].AppendChild(node);
    }
    SqlDR.Close();
    SqlComm.Connection.Close();
      

  10.   

    可以用XMLTEXTWRITER 很好用
    dim xtr as new xmlTextWriter("c:\rec.xml",Encoding.utf8)xtr.writeStartdocument
    xtr.writeStartElement("rec")
    xtr.writeStartElement("一级1")
    xtr.writeStartElement("二级11")
    xtr.writeElementString("三级111")
    xtr.writeElementString("三级112")
    xtr.WriteFullEndElementxtr.writeStartElement("二级12")
    xtr.writeElementString("三级121")
    xtr.writeElementString("三级122")
    xtr.WriteFullEndElement
    xtr.WriteFullEndElementxtr.writeStartElement("一级2").......xtr.writeEndDocument
    xtr.Flush       '这一步别忘了很重要
    xtr.Close