Avatar billede mickni33 Nybegynder
18. februar 2008 - 23:05 Der er 9 kommentarer og
1 løsning

append xml childs

da der er flere brugere på C# prøver jeg at poste dette VB.Net kode her :-)

dette stykke kode loader en customer af gangen..
men hvad hvis jeg gerne vil loade alle customers på en gang, samlet ?
noget ala:
xr = xr +New System.Xml.XmlTextReader(IOSTR)
Next
xml.Load(xr)
return xml

Hvordan kan man løse det?
------------------------------------------------------------------
Dim xr As System.Xml.XmlReader
            Dim xml As New Xml.XmlDocument
            For Each obj As Object In objList
                Dim x As New Xml.Serialization.XmlSerializer(obj.GetType)
                Dim IOSTR As IO.Stream = New IO.MemoryStream
                x.Serialize(IOSTR, obj)
                IOSTR.Seek(0, System.IO.SeekOrigin.Begin)
                xr = New System.Xml.XmlTextReader(IOSTR)
                xml.Load(xr)
            Next

            Return xml
Avatar billede bvli Praktikant
19. februar 2008 - 00:47 #1
XmlDocument doc = new XmlDocument(); ;
List<Customer> customers = new List<Customer>() { new Customer(), new Customer() };
XmlSerializer xs = new XmlSerializer(typeof(List<Customer>));
using (MemoryStream ms = new MemoryStream())
{
    xs.Serialize(ms, customers);
    ms.Seek(0, SeekOrigin.Begin);
    doc.Load(ms);
}
return doc;

måske?

/B :)
Avatar billede arne_v Ekspert
19. februar 2008 - 01:44 #2
Jeg tror at du griber det forkert an.

Gem og hent et enkelt objekt som er en List af Customer er langt nemmere.
Avatar billede mickni33 Nybegynder
19. februar 2008 - 11:32 #3
nu er jeg fundet frem til dette hvor der gemmes i en stringBuilder:

    For Each obj As Object In objList
                Dim x As New Xml.Serialization.XmlSerializer(obj.GetType)
                Dim IOSTR As IO.Stream = New IO.MemoryStream
                x.Serialize(IOSTR, obj)
                IOSTR.Seek(0, System.IO.SeekOrigin.Begin)
                xr = New System.Xml.XmlTextReader(IOSTR)
                xmldoc.Load(xr)
                sb.Append(xmldoc.OuterXml)
                xmldoc = New Xml.XmlDocument()
            Next

problemet er nu bare at der efter hver Next appendes en <xml 1.0> og da der kun må være en xml ærklæring virker dette ikke...
er der en metode til at fjerne disse <xml 1.0> for så kan jeg bare insertBefore(xmldeclariation,element) når al min xml er appended
Avatar billede bvli Praktikant
19. februar 2008 - 14:12 #4
Som Arne også skriver, så er det altså ikke den måde du bør gøre det på. Det er og bliver et hack - og når nu framework'et har så fin support for xml-serialisering, så forstår jeg egentlig ikke, hvorfor du vil opfinde den dybe tallerken endnu en gang?

Som jeg også skrev før - serialisér listen af Customers i stedet.. (altså - synes jeg ..) :)

/B :)
Avatar billede mickni33 Nybegynder
19. februar 2008 - 14:14 #5
ja det er også den måde jeg prøver nu :-)
men hva betyder { new Customer(), new Customer() };
Avatar billede mickni33 Nybegynder
19. februar 2008 - 14:22 #6
Public Shared Function ObjToXML(ByVal obj As Object) As Xml.XmlDocument
            Dim x As New Xml.Serialization.XmlSerializer(obj.GetType())
            Dim IOSTR As IO.Stream = New IO.MemoryStream
            x.Serialize(IOSTR, obj)
            IOSTR.Seek(0, System.IO.SeekOrigin.Begin)
            Dim xr As System.Xml.XmlReader = New System.Xml.XmlTextReader(IOSTR)
            Dim xml As New Xml.XmlDocument
            xml.Load(xr)
            Return xml
        End Function

Sådan har jeg gjort.. ved at lave en klasse som indeholder listen med customers... også serialisere denne klasse istadet

læg et svar begge
Avatar billede bvli Praktikant
19. februar 2008 - 14:32 #7
Svar :)
{ new Customer(), new Customer() }; er en hurtig måde at initiere en liste, f.eks. når den deklareres.

Altså i stedet for:
List<Customer> list = new List<Customer>();
list.Add(new Customer);
list.Add(new Customer);

/B :
Avatar billede mickni33 Nybegynder
19. februar 2008 - 14:39 #8
nåååå ok som et array
Venter lige på at arne_v lægger et svar
Avatar billede arne_v Ekspert
20. februar 2008 - 01:23 #9
Jeg synes at du skal give dem alle til bvli.
Avatar billede mickni33 Nybegynder
20. februar 2008 - 09:02 #10
fandme smart det Serialisering
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