2012-03-20 30 views
2

下面的代碼片段返回XML文檔上飛修改XML

public XmlDocument GetXMLFile(int ID) 
     { 

      List<UserInfoBE> data = GetById(ID); 
      DataSet ds = ConvertGenericsListToDataSet(data); 
      XmlDocument XmlDoc = new XmlDocument(); 
      XmlDocument doc = GenerateXMLDeclaration(XmlDoc);//Create xml Declaration 
      doc = AddTableTag(doc);//Create parent node USERDATA 

      foreach (DataRow dr in ds.Tables[0].Rows) 
      { 
       doc = AddUserinfoTag(doc, dr[8].ToString(), Convert.ToInt32(dr[31].ToString()), Convert.ToString(dr[32].ToString()), dr[3].ToString()); 
      } 

      doc = SetHeirarchyLevel(doc); 
      string _errorFile = AppDomain.CurrentDomain.BaseDirectory + "XML\\"; 
      System.IO.Directory.CreateDirectory(_errorFile); 
      _errorFile += "FIle" + DateTime.Now.ToString("dd-MM-yyyy") + ".xml"; 
      XmlNodeList nodes = doc.SelectNodes("USERDATA/Userinfo"); 
      XmlDocument newXMLDoc = new XmlDocument(); 
      XmlDocument newDoc = GenerateXMLDeclaration(newXMLDoc); 
      newDoc.AppendChild(nodes);    
      doc.Save(_errorFile); 
      return doc; 
     } 

XML文件格式:

<?xml version="1.0"?> 
<USERDATA> 
    <Userinfo> 
    <Userinfo> 
     <Userinfo> 
     <Userinfo> 
      <Userinfo> 
      <Userinfo/> 
      <Userinfo> 
       <Userinfo/> 
      </Userinfo> 
      </Userinfo> 
      <Userinfo> 
      <Userinfo/> 
      <Userinfo/> 
      </Userinfo> 
     </Userinfo> 
     </Userinfo> 
    </Userinfo> 
    </Userinfo> 
</EDVDATA> 

問題如何得到文件格式如下

<Userinfo> 
     <Userinfo> 
      <Userinfo> 
      <Userinfo> 
       <Userinfo> 
       <Userinfo/> 
       <Userinfo> 
        <Userinfo/> 
       </Userinfo> 
       </Userinfo> 
       <Userinfo> 
       <Userinfo/> 
       <Userinfo/> 
       </Userinfo> 
      </Userinfo> 
      </Userinfo> 
     </Userinfo> 
     </Userinfo> 

我試圖將return doc對象(Xml文件)保存在文件夾中。 然後創建一個新的xmldocument對象,並試圖追加Xmlnodelist,其中新的xmlobject中的用戶信息結構(剛纔在上面)newDoc.AppendChild(nodes);線引發錯誤

無法從「System.Xml.XmlNodeList」到「System.Xml.XmlNode」

任何幫助是非常讚賞轉換。

回答

1

您正試圖追加多個節點,但該函數一次只追加單個節點。試試這個:

foreach(XmlNode node in nodes) 
{ 
    newDoc.AppendChild(node); 
} 
+0

謝謝,你是對的Appenchild方法期待單個節點。 – masif 2012-03-20 08:12:37

0

解決它這個樣子,

公衆的XmlDocument GetXMLFile(INT ID){

 List<UserInfoBE> data = GetById(ID); 
     DataSet ds = ConvertGenericsListToDataSet(data); 
     XmlDocument XmlDoc = new XmlDocument(); 
     XmlDocument doc = GenerateXMLDeclaration(XmlDoc);//Create xml Declaration 
     doc = AddTableTag(doc);//Create parent node USERDATA 

     foreach (DataRow dr in ds.Tables[0].Rows) 
     { 
      doc = AddUserinfoTag(doc, dr[8].ToString(), Convert.ToInt32(dr[31].ToString()), Convert.ToString(dr[32].ToString()), dr[3].ToString()); 
     } 

     doc = SetHeirarchyLevel(doc); 
     XmlNodeList nodes = doc.SelectNodes("USERDATA/Userinfo"); 
     XmlDocument newXMLDoc = new XmlDocument(); 
     XmlDocument newDoc = GenerateXMLDeclaration(newXMLDoc); 
     foreach (XmlNode node in nodes) 
     { 
      newDoc.AppendChild(newDoc.ImportNode(node,true)); 
     } 
     return newDoc; 
    }