Avatar billede winners79 Nybegynder
11. juni 2008 - 22:18 Der er 5 kommentarer og
1 løsning

XmlSerializer, namespace til attributter

Hej EKsperter

Jeg har det problem at jeg ikke kan få tilføjet et namespace til attributter når jeg bruger XmlSerializing:

Min Xml skulle gerne komme til at se sådan her ud:
<w:sz w:val="32"/>

Men den kommer til at se sådan her ud:
<w:sz val="32" />

Bruger følgende kode:

        public class TableStyle
        {
            private string size= "32";

            [XmlAttribute(AttributeName = "val", Namespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main")]
            public string TableFormatting
            {
                get { return tableFormatting; }
                set { tableFormatting = value; }
            }
        }

_______
main:

XmlSerializer SerializerObj = new XmlSerializer(typeof(Document));
                XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
                namespaces.Add("ve", "http://schemas.openxmlformats.org/markup-compatibility/2006");
                namespaces.Add("o", "urn:schemas-microsoft-com:office:office");
                namespaces.Add("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
                namespaces.Add("m", "http://schemas.openxmlformats.org/officeDocument/2006/math");
                namespaces.Add("v", "urn:schemas-microsoft-com:vml");
                namespaces.Add("wp", "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing");
                namespaces.Add("w10", "urn:schemas-microsoft-com:office:word");
                namespaces.Add("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
                namespaces.Add("wne", "http://schemas.microsoft.com/office/word/2006/wordml");
               
                TextWriter WriteFileStream = new StreamWriter(@"C:\document.xml");
                SerializerObj.Serialize(WriteFileStream, doc, namespaces);
                WriteFileStream.Flush();
                WriteFileStream.Close();

Nogen der kan se hvad der går galt? er det overhovedet muligt?
Avatar billede arne_v Ekspert
11. juni 2008 - 22:38 #1
Er det noedvendigt ?

Normalt vil man kun bruge namespaces paa elementer - da attributter jo er defineret
via deres element.
Avatar billede winners79 Nybegynder
11. juni 2008 - 23:04 #2
ja da jeg genererer WordML, og Word kan ikke åbne en fil hvor der ikke er et namespace på alle attributter (w:)
Avatar billede arne_v Ekspert
22. juni 2008 - 21:40 #3
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

namespace E
{
    [XmlRoot(ElementName="c1",Namespace="http://arne")]
    public class C1
    {
        public int V { get; set; }
    }
    [XmlRoot(ElementName="c2",Namespace="http://arne")]
    public class C2
    {
        [XmlAttribute(AttributeName="v",Namespace="http://arne")]
        public int V { get; set; }
    }
    [XmlRoot(ElementName="c3",Namespace="http://arne")]
    public class C3
    {
        [XmlAttribute(AttributeName="v",Namespace="http://arne",Form=XmlSchemaForm.Qualified)]
        public int V { get; set; }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            XmlSerializer ser1 = new XmlSerializer(typeof(C1));
            XmlSerializerNamespaces ns1 = new XmlSerializerNamespaces();
            ns1.Add("arne", "http://arne");
            ser1.Serialize(Console.Out, new C1(), ns1);
            Console.WriteLine();
            XmlSerializer ser2 = new XmlSerializer(typeof(C2));
            XmlSerializerNamespaces ns2 = new XmlSerializerNamespaces();
            ns2.Add("arne", "http://arne");
            ser2.Serialize(Console.Out, new C2(), ns2);
            Console.WriteLine();
            XmlSerializer ser3 = new XmlSerializer(typeof(C3));
            XmlSerializerNamespaces ns3 = new XmlSerializerNamespaces();
            ns3.Add("arne", "http://arne");
            ser3.Serialize(Console.Out, new C3(), ns3);
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

udskriver:

<?xml version="1.0" encoding="IBM437"?>
<arne:c1 xmlns:arne="http://arne">
  <arne:V>0</arne:V>
</arne:c1>
<?xml version="1.0" encoding="IBM437"?>
<arne:c2 v="0" xmlns:arne="http://arne" />
<?xml version="1.0" encoding="IBM437"?>
<arne:c3 arne:v="0" xmlns:arne="http://arne" />
Avatar billede arne_v Ekspert
22. juni 2008 - 21:40 #4
Form=XmlSchemaForm.Qualified må være det du leder efter !
Avatar billede arne_v Ekspert
29. juni 2008 - 05:32 #5
OK ?
Avatar billede winners79 Nybegynder
29. juni 2008 - 17:49 #6
ja det ser jo fint ud, har bare ikke lige haft tid til at teste det.

Men mange tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester