Search code examples
c#xmlxml-parsingoutputprefix

How can I add prefixes to xml output using C#?


I wanna add prefixes like cbc: cac: iac: to xml output to see output like this - <cbc:ID>custom value</cbc:ID>  but  everytime it looks like <ID>custom value</ID>. Also I've used namespace urls in CreateElement method from XML Document but everytime the output is adding these urls after every prefix and I don't need this. Could u say to me how can I add prefixes in xml like that?


Solution

  • If you are using XML serialization code will look like this. When no namespace use [XmlElement(Namespace = "")]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
    
    namespace ConsoleApp2
    {
        class Program
        {
            const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
                namespaces.Add(string.Empty, "urn:carrier:names:specification:ubl:schema:xsd:CarrierDealerContractorInvoice-1.0");
                namespaces.Add("cac", "urn:oasis:names:draft:ubl:schema:xsd:CommonAggregateComponents-2");
                namespaces.Add("cbc", "urn:oasis:names:draft:ubl:schema:xsd:CommonBasicComponents-2");
                namespaces.Add("ibc", "urn:carrier:names:specification:ubl:schema:xsd:CarrierDealerContractorInvoiceBasicComponents-1.0");
                namespaces.Add("iac", "urn:carrier:names:specification:ubl:schema:xsd:CarrierDealerContractorInvoiceAggregateComponents-1.0");
                namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
    
                XmlWriter writer = XmlWriter.Create(FILENAME, settings);
                XmlSerializer serializer = new XmlSerializer(typeof(DealerContractorInvoice));
    
                DealerContractorInvoice invoice = new DealerContractorInvoice();
                serializer.Serialize(writer, invoice, namespaces);
            }
        }
        [XmlRoot(Namespace = "urn:oasis:names:draft:ubl:schema:xsd:CommonBasicComponents-2")]
        public class DealerContractorInvoice
        {
            [XmlElement(Namespace = "urn: carrier:names: specification:ubl: schema:xsd: CarrierDealerContractorInvoiceAggregateComponents - 1.0")]
            public string ID { get; set; }
    
            [XmlElement(Namespace = "urn:carrier:names:specification:ubl:schema:xsd:CarrierDealerContractorInvoiceAggregateComponents-1.0")]
            DealerContractorInvoiceLine DealerContractorInvoiceLine { get; set; }
        }
        public class DealerContractorInvoiceLine
        {
        }
    }
    

    Using xml linq :

           const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                string ident = "<?xml version='1.0'?>" +
                               "<DealerContractorInvoice " +
                                  " xmlns=\"urn: carrier: names: specification: ubl: schema: xsd: CarrierDealerContractorInvoice - 1.0\"" +
                                  " xmlns:cac=\"urn: oasis: names: draft: ubl: schema: xsd: CommonAggregateComponents - 2\"" +
                                  " xmlns:cbc=\"urn: oasis: names: draft: ubl: schema: xsd: CommonBasicComponents - 2\"" +
                                  " xmlns:ibc=\"urn: carrier: names: specification: ubl: schema: xsd: CarrierDealerContractorInvoiceBasicComponents - 1.0\"" +
                                  " xmlns:iac=\"urn: carrier: names: specification: ubl: schema: xsd: CarrierDealerContractorInvoiceAggregateComponents - 1.0\"" +
                                  " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
                                  " xsi:schemaLocation=\"urn:carrier:names:specification:ubl:schema:xsd:CarrierDealerContractorInvoice-1.0 ../../src/xsd/runtime/maindoc/UBL-CarrierDealerContractorInvoice-1.0.xsd\"" +
                               "/>";
    
                XDocument doc = XDocument.Parse(ident);
                XElement invoice = doc.Root;
    
                //use when no prefix
                XNamespace ns = invoice.GetDefaultNamespace();
                XNamespace nsCbc = invoice.GetNamespaceOfPrefix("cbc");
    
                XElement id = new XElement(nsCbc + "ID");
                invoice.Add(id);
            }