2013-02-11 118 views
2

我试图集合类转换为XML数据和XML数据追加到XML文件 这里是我的功能”如何将XML数据追加到XML文件

public void XmlWriter(List<Email> Femails) 
    { 
     string ErrorXmlFile = @"../../Retries.xml"; 
     try 
     { 
      if (!File.Exists(ErrorXmlFile)) 
      { 
       XmlSerializer xSeriz = new XmlSerializer(typeof(List<Email>)); 
       FileStream fs = File.Open(ErrorXmlFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); 
       xSeriz.Serialize(fs, Femails); 

      } 
      else 
      { 
       foreach(Email email in Femails) 
       { 
       XmlDocument doc = new XmlDocument(); 
       doc.Load(ErrorXmlFile); 
       XmlNode xnode = doc.CreateNode(XmlNodeType.Element, "ArrayOfEmail", null); 
       XmlSerializer xSeriz = new XmlSerializer(typeof(Email)); 
       StringWriter sw = new StringWriter(); 
       xSeriz.Serialize(sw,email); 
       xnode.InnerXml = Convert.ToString(sw); 
       doc.DocumentElement.AppendChild(xnode); 
       doc.Save(ErrorXmlFile); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

    } 

在上面的函数‘女人 - ’是List的参数,其中Email是userdefind自定义类。 第一次检查文件是否存在。如果没有,那么它现在工作正常,但是当我需要追加数据到我现有的文件失败。

按照我上面的代码,它将单个电子邮件对象转换为xml数据与<?xml version="1.0" encoding="utf-16"?>与此标签,我想在绑定之前删除。

我从我的代码得到的输出是:

<?xml version="1.0"?> 
<ArrayOfEmail xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Email> 
    <UtcDateTime>2013-01-23T10:09:48+05:30</UtcDateTime> 
    <From>Rajendra Bhalekar &lt;[email protected]&gt;</From> 
    <To>Mansha Suman &lt;[email protected]&gt;</To> 
    <Subject>Ye dil sun raha hai jo mere dil ki hai sada ye...socha tha na maine......</Subject> 
    <IDX>32a84ef7-31bf-4366-bcab-ec10b2f39bc6</IDX> 
    <Body> 
Hi Raj, 

Dil pe mat le yaar dil pe mat le.... 
idx:32a84ef7-31bf-4366-bcab-ec10b2f39bc6 

odhani chunariya tere naam ki - Pyar kiya to darna kya 

sona sona telephone dhun pe hasne wali - hidustaniREPLY ABOVE THIS LINEdil 
ibadat kar raha hai 


Thanks &amp; regards, 

Raj 

</Body> 
    <ExtractReplyText>Hi Raj,Dil pe mat le yaar dil pe mat le....idx:32a84ef7-31bf-4366-bcab-ec10b2f39bc6odhani chunariya tere naam ki - Pyar kiya to darna kya</ExtractReplyText> 
    </Email> 
    <ArrayOfEmail> 
    <?xml version="1.0" encoding="utf-16"?> 
<Email xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <UtcDateTime>2013-01-23T10:09:48+05:30</UtcDateTime> 
    <From>Rajendra Bhalekar &lt;[email protected]&gt;</From> 
    <To>Mansha Suman &lt;[email protected]&gt;</To> 
    <Subject>Ye dil sun raha hai jo mere dil ki hai sada ye...socha tha na maine......</Subject> 
    <IDX>32a84ef7-31bf-4366-bcab-ec10b2f39bc6</IDX> 
    <Body> 
Hi Raj, 

Dil pe mat le yaar dil pe mat le.... 
idx:32a84ef7-31bf-4366-bcab-ec10b2f39bc6 

odhani chunariya tere naam ki - Pyar kiya to darna kya 

sona sona telephone dhun pe hasne wali - hidustaniREPLY ABOVE THIS LINEdil 
ibadat kar raha hai 


Thanks &amp; regards, 

Raj 

</Body> 
    <ExtractReplyText>Hi Raj,Dil pe mat le yaar dil pe mat le....idx:32a84ef7-31bf-4366-bcab-ec10b2f39bc6odhani chunariya tere naam ki - Pyar kiya to darna kya</ExtractReplyText> 
</Email></ArrayOfEmail> 
</ArrayOfEmail> 

这是不是因为我怀孕了。请建议我需要更正。

+0

你好,你的问题是有点不清楚。 “它失败了” - 它是如何失败的,例外? “不,我期待” - 你期待什么?谢谢 – RobJohnson 2013-02-11 12:42:04

+0

它失败意味着它没有给出适当的结果有效的XML文件。例如<?xml version =“1.0”encoding =“utf-16”?>它是我的原始xml文档。当我绑定新的节点到我的XML文档它的绑定按照给定下面<?xml version =“1.0”encoding =“utf-16”?><?xml version =“1.0”encoding =“utf- ?> Raj 2013-02-12 05:48:59

回答

2

我problam现在是解决这个代码是为我工作

public void XmlWriter(List<Email> Femails) 
{ 
    #region On Error Retry and retrycount with xml file 

    string ErrorXmlFile = @"../../Retries.xml"; 
    try 
    { 
     if (!File.Exists(ErrorXmlFile)) 
     { 
      XmlSerializer xSeriz = new XmlSerializer(typeof(List<Email>)); 
      FileStream fs = File.Open(ErrorXmlFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); 
      xSeriz.Serialize(fs, Femails); 
      foreach (Email email in Femails) 
      { 
       SaveAttachment(email); 
      } 

     } 
     else 
     { 
      XmlDocument doc = new XmlDocument(); 
      doc.Load(ErrorXmlFile); 

      foreach (Email email in Femails) 
      { 
       XmlNode xnode = doc.CreateNode(XmlNodeType.Element, "BLACKswastik", null); 
       XmlSerializer xSeriz = new XmlSerializer(typeof(Email)); 
       XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
       ns.Add("", ""); 
       XmlWriterSettings writtersetting = new XmlWriterSettings(); 
       writtersetting.OmitXmlDeclaration = true; 
       StringWriter stringwriter = new StringWriter(); 
       using (XmlWriter xmlwriter = System.Xml.XmlWriter.Create(stringwriter, writtersetting)) 
       { 
        xSeriz.Serialize(xmlwriter, email, ns); 
       } 
       xnode.InnerXml = stringwriter.ToString(); 
       XmlNode bindxnode = xnode.SelectSingleNode("Email"); 
       doc.DocumentElement.AppendChild(bindxnode); 
       SaveAttachment(email); 
      } 
      doc.Save(ErrorXmlFile); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 

    #endregion 
}