18. februar 2008 - 23:05Der 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
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;
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
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 ..) :)
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
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.