Avatar billede stefan_v Nybegynder
24. februar 2006 - 09:56 Der er 12 kommentarer og
1 løsning

XML Serializing

Hej - jeg sidder med et lille (?) problem...

Jeg prøver at serialize et object så det kommet til at se ud som følgende:

<First>
<Second sec_att="2">sec_val</Second>
</First>

Hvordan er det lige man gør det? Jeg kan godt lave fx
<Second>2</Second>
eller
<Second sec_att="2"/>

Men ikke hvor der både er en attribut og en "in-line" værdi...

Det må da være super nemt i .net skulle man tro, men jeg kan ikke finde noget materiale om det (google! Du har svigtet mig!)

Ideer?
Avatar billede aaberg Nybegynder
24. februar 2006 - 10:02 #1
tjek eksemplet på denne side. Måske det hjælper dig lidt.

http://msdn2.microsoft.com/en-us/library/system.xml.schema.xmlschemavalidator(VS.80).aspx#Mtps_DropDownFilterText
Avatar billede stefan_v Nybegynder
24. februar 2006 - 10:08 #2
Hmm... Godt eksempel, men læg mærke til at de ikke et eneste sted laver den her:
<Second sec_att="2">sec_val</Second>

De bruger udelukkende elementer... :-/
Avatar billede aaberg Nybegynder
24. februar 2006 - 10:13 #3
Herunder har jeg copy/pastet xmlen fra eksemplet ind:

<bookstore xmlns="http://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

På <book> elementet er der flere attributes!
Avatar billede aaberg Nybegynder
24. februar 2006 - 10:15 #4
Vent lidt. Nu forstår jeg hvad du mener. Du vil lave et element der både har attributes og text.

Undskyld. Jeg misforstod. Jeg skal se om jeg kan finde et eksempel dette. Jeg har ikke et i hovedet.
Avatar billede dr_chaos Nybegynder
24. februar 2006 - 10:27 #5
du kan bruge noget i denne stil:
//opret ny xml fil
                                    System.Xml.XmlWriter xmlw = new System.Xml.XmlTextWriter(@"c\\test.xml"), null);
                                    //skriv start element
                                    xmlw.WriteStartElement("?xmlversion='1.0'?");
                                    xmlw.WriteStartElement("First");
                                    xmlw.WriteStartElement("Second");
                                    xmlw.WriteAttributeString("sec_att","2");
                                    xmlw.WriteString("sec_val");
                                    xmlw.WriteEndElement();
                                    xmlw.WriteEndElement();
                                    xmlw.Close();
Avatar billede stefan_v Nybegynder
24. februar 2006 - 10:29 #6
Jeps, men ideen var at bruge Serializing, som i aaberg80s eksempel...
Altså serialize et object til XML...
Avatar billede dr_chaos Nybegynder
24. februar 2006 - 10:31 #7
ved jeg bare et foreslag.
Men hvordan er dit objekt opbygget ?
Avatar billede aaberg Nybegynder
24. februar 2006 - 10:32 #8
Jeg har ikke lige testet det. Men prøv at tilføje attributten XmlText til den property der skal ligge som tekst, og attributten XmlAttribute til den som skal ligge som attribut.
Avatar billede stefan_v Nybegynder
24. februar 2006 - 10:46 #9
YES SIR!
Mange tak :) Det var lige hvad jeg skulle bruge - jeg VIDSTE at det var noget super simpelt, kunne bare ikke finde det.

Smid et svar og du skal blive belønnet!
Avatar billede stefan_v Nybegynder
24. februar 2006 - 10:49 #10
Til andre med samme problem:

public class Second
    {
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string sec_att;

        [System.Xml.Serialization.XmlText()]
        public string in_line_text;


        public Second()
        {
            sec_att="2";
            in_line_text = "sec_val";
        }
    }

    public class DisappearingData
    {
        public static void Main()
        {
            System.Xml.Serialization.XmlSerializer s = new
                System.Xml.Serialization.XmlSerializer(typeof(Second) );
            Second r= new Second();
            System.Xml.Serialization.XmlSerializerNamespaces ns = new
                System.Xml.Serialization.XmlSerializerNamespaces() ;
            ns.Add( "", "" );
            s.Serialize(System.Console.Out,r,ns);
        }
    }

Output:
<?xml version="1.0" encoding="IBM437"?>
<Second sec_att="2">sec_val</Second>
Avatar billede aaberg Nybegynder
24. februar 2006 - 10:50 #11
svar :-)
Avatar billede stefan_v Nybegynder
24. februar 2006 - 10:53 #12
Og god weekend til jer begge.
Avatar billede aaberg Nybegynder
24. februar 2006 - 10:55 #13
tak. I lige måde.
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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