简体   繁体   中英

Append Serialized Object Into XML in C#

I have a XML structer like that

<?xml version="1.0" encoding="utf-8"?>
<Product>
  <ProductName>da</ProductName>
  <PluginPath></PluginPath>
  <Instances></Instances>
</Product>

and i serialize my object to string.

<?xml version="1.0"?>
<Instance xmlns:xsi="http://bla bla" xmlns:xsd="bla bla" UniqueId="d4820029b7d7">
<InstanceName>Instance MyTestPluginForm</InstanceName>
<Description>Test Plugin IW</Description>
<AddedDate>2016-10-19T11:05:10.7443404+02:00</AddedDate>
<LogSettings>
<LoggingLevel>None</LoggingLevel>
<LogFilePath /><MaximumSize>100</MaximumSize
<ClearAfterDays>7</ClearAfterDays>
<IsSaveActiviesToEventLog>false</IsSaveActiviesToEventLog>
</LogSettings>
<ProductSpecific/>
</Instance>

So I want to append the second one in the Instances node in the first xml. But as you see both has xml definition on the top and after serializazion i got xmlns:xsi and xmlns:xsd attributes.

How to solve this problem?

PS: I do not want to create XML elements. Because my xml schema is dynamic. It has to be done with serialization. (I already checked this sample)

I solved the problem. using the code here

    public static void CreateXmlFile(Instance instance, string filePath)
    {

       var xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Product><ProductName>da</ProductName><PluginPath></PluginPath><Instances></Instances></Product>";



        XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.LoadXml(xml);
        xmlDocument.Save(filePath);


        XmlNode xnode = xmlDocument.CreateNode(XmlNodeType.Element, "Instances", null);
        XmlSerializer xSeriz = new XmlSerializer(typeof(Instance));
        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, instance, ns);
        }
        xnode.InnerXml = stringwriter.ToString();
        XmlNode bindxnode = xnode.SelectSingleNode("Instance");
        xmlDocument.DocumentElement.SelectSingleNode("Instances").AppendChild(bindxnode);
        xmlDocument.Save(filePath);

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM