如何将xml数据附加到xml文件中

本文关键字:xml 文件 数据 | 更新日期: 2023-09-27 17:58:50

我正在尝试将集合类转换为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;
        }
    }

在上面的函数中,"femail"是List的参数,其中Email是用户定义的自定义类。它第一次检查文件是否存在。如果没有,那么它现在可以正常工作,但当我需要将数据附加到现有文件时,它会失败。

根据我上面的代码,它使用<?xml version="1.0" encoding="utf-16"?>将单个电子邮件对象转换为xml数据,并带有我想在绑定之前删除的标记。

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

<?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;rajendra.b000@gmail.com&gt;</From>
    <To>Mansha Suman &lt;asdmansha@gmail.com&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;rajendra.b000@gmail.com&gt;</From>
  <To>Mansha Suman &lt;asdmansha@gmail.com&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>

这不是我所期望的。请给我建议需要改正的地方。

如何将xml数据附加到xml文件中

我的问题现在解决了,这段代码对我来说是

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
}