Avatar billede wwwbolig Nybegynder
15. april 2002 - 11:17 Der er 11 kommentarer og
1 løsning

Skriv XML streng til XML fil

Hey alle

Jeg har lavet en webservice som modtager en streng fra forskellige klienter, denne streng indeholder XML. På serveren har jeg en XML fil hvor jeg vil gemme alle XML strenge jeg modtager fra klienterne. Denne fil indeholder:

<books>
    <book>
        <title>Peter Plys</title>
        <authors>
            <author>John Doe</author>
            <author>Jane DOe</author>
        </authors>
    </book>
    <book>
        <title>Pokemon</title>
        <authors>
            <author>Jeng Li</author>
        </authors>
    </book>
</books>

Strengen jeg modtager ser f.eks. sådan her ud:

"<books><book><title>Tinsoldaten</title><authors><author>John Carpenter</author></authors></book></books>"

Spørgsmålet er nu hvordan jeg indsætter det nye <book> element ind i den eksisterende xml-fil?

Håber der er nogen der kan hjælpe.
Avatar billede osaka_san Nybegynder
15. april 2002 - 11:25 #1
Et bud ville være at åbne xml filen på serveren som et xmlDocument - tilføje noden det sted den skal være, og så gemme XMLDocumentet?

Med venlig Hilsen
Oscar Eg Gensmann
Avatar billede wwwbolig Nybegynder
15. april 2002 - 11:36 #2
Jo det var også mit bud :-)

Spørgsmålet var bare mere hvordan det gøres i praksis.
Avatar billede osaka_san Nybegynder
15. april 2002 - 11:47 #3
:) - well kan ikke lige levere noget færdig kode, da jeg ikke lige har lavet noget der ligner det for nyelig, men jeg tror hvis du slår op i dokumentationen til .net så må der næsten være en walkthrough på det eller nogle kodestumper der beskriver hvordan du kan gøre.

Meget kan man sige om .NET, men dokumentationen er yderst godt lavet og fyldt med masser af gode eksempler, så det er bare at med at "Dig in" - jeg garanterer for at der er et  eksempel på skrivning til et xml fokument :-)

Mvh.
Oscar Eg Gensmann
Avatar billede nute Nybegynder
15. april 2002 - 12:05 #4
se om ikke dette kan hjelpe:

XmlDocument xmlDoc = [ditt xml dokument];
XmlNode rootNode = xmlDoc.FirstChild;
XmlNode objXmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "book", "");
objXmlNode.InnerText = dinStreng;
rootNode.AppendChild( objXmlNode );

vupti..så skal den ligge der inne

Hvis du så skal skrive til filen igjen, så skal du gjøre noe ála:

FileStream fs = File.Open( "dinfil.xml", FileMode.Create, FileMode.Write );
XmlTextWriter xmlWriter = new XmlTextWriter( fs, null );
xmlDoc.WriteTo( xmlWriter );

osaka_san >> én ting er særdeles dårlig dokumentert i dokumentasjonen, og det er håndtering av XML :-|
Avatar billede wwwbolig Nybegynder
15. april 2002 - 12:11 #5
osaka_san >> jeg er stor fan af dokumentationen, men lige et eksempel på hvordan man tilføjer en XML streng til et XMLdocument har jeg har svært ved at finde :-)

Må lige prøve Nute's eksempel, ser spændende ud :-)
Avatar billede osaka_san Nybegynder
15. april 2002 - 12:49 #6
Nute> hmm spøjst fordi det tog mig ikke lang tid ff.eks at finde denne her under xmldocument members:

Example
[Visual Basic, C#] The following example loads XML into an XmlDocument object and saves it out to a file.

[Visual Basic, C#] Note  This example shows how to use one of the overloaded versions of Save. For other examples that might be available, see the individual overload topics.
[Visual Basic]
Option Explicit
Option Strict

Imports System
Imports System.IO
Imports System.Xml

Public Class Sample
   
    Public Shared Sub Main()
        'Create the XmlDocument.
        Dim doc As New XmlDocument()
        doc.LoadXml(("<book genre='novel' ISBN='1-861001-57-5'>" & _
                    "<title>Pride And Prejudice</title>" & _
                    "</book>"))
       
        'Save the document to a file.
        doc.Save("data.xml")
    End Sub 'Main
End Class 'Sample

Derudover er der masser af beskrivelser på hvordan man tilføjer nye elementer til et XmlDoc ;-)

Med Venlig Hilsen
Oscar Eg Gensmann
Avatar billede nute Nybegynder
15. april 2002 - 13:01 #7
osaka_san >> hmmm....spøjs...kanskje det er fordi mine krav til xml håndering i .NET er litt andre enn de "banaliteter" som disse :-) Når du paster den overstående kode, så kan jeg unektelig huske å ha sett den selv, men i min desperate jakt etter løsninger på xml problemer som overgår de fleste eksempler i dokumentasjonen, må jeg nok innrømme at jeg har glemt den :-|

Det er jo en litt enklere måte å save dokumentet på enn å benytte et Stream objekt...

*glider sakte baklengs ut av døren mens mitt hode bukker ydmykt på japansk vis mot osaka_san*

;-)

/nute

jeg har bare hatt en lorteuke !!!
Avatar billede osaka_san Nybegynder
15. april 2002 - 13:12 #8
nute>

>jeg har bare hatt en lorteuke !!!

Det har vi alle engang imellem ;-) Håber denne bliver bedre!

De bedste hilsner
Oscar
Avatar billede wwwbolig Nybegynder
15. april 2002 - 15:33 #9
Hej Nute

Jeg forsøger følgende:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("books.xml"));
XmlNode rootNode = xmlDoc.FirstChild;
XmlNode objXmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "book", "");
objXmlNode.InnerText = "<books><book><title>Tinsoldaten</title><authors><author>John Carpenter</author></authors></book></books>";
rootNode.AppendChild( objXmlNode );

men følgende fejl kommer:

System.InvalidOperationException: The current node cannot contain other nodes. at System.Xml.XmlNode.AppendChild(XmlNode newChild)

books.xml indeholder:

<?xml version="1.0"?>
<books>
    <book>
        <title>Peter Plys</title>
        <authors>
            <author>John Doe</author>
            <author>Jane DOe</author>
        </authors>
    </book>
    <book>
        <title>Pokemon</title>
        <authors>
            <author>Jeng Li</author>
        </authors>
    </book>
</books>
Avatar billede nute Nybegynder
15. april 2002 - 16:36 #10
hola...

jeg har kikket litt på det, og kommet frem til at du nok skal betraktedin streng som et xml dokument:


XmlDocument xmlStringDoc = new XmlDocument();
xmlStringDoc.LoadXml( xmlString );

Deretter kan du navigere deg rundt i dette dokument ut fra rootnode:

XmlNode xmlStringRootNode = xmlStringDoc.FirstChild;

hente ut alle opplysningene fra dette dokument og legge det inn i ditt orginale dokument.

Det er en endring i min opprinnelige posting du må gjøre:

XmlNode rootNode = xmlDoc.FirstChild;

skal være:

XmlNode fileRootNode = xmlFileDoc.DocumentElement;

Jeg har desverre ikke tid til å kikke mer på det før senere i aften :-|

/nute
Avatar billede wwwbolig Nybegynder
15. april 2002 - 19:04 #11
Tak for hjælpen Nute, det lykkedes til sidst :-)

Her er koden der virkede:

//Document to save XML data in
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("books.xml"));
XmlNode rootNode = xmlDoc.DocumentElement;
           
//Document with recieved XML data
XmlDocument xmlStr = new XmlDocument();
xmlStr.LoadXml("<books><book><title>Tinsoldaten</title><authors><author>John Carpenter</author></authors></book></books>");
           
//New entry node
XmlNode NewNodeEntry = xmlDoc.ImportNode(xmlStr.DocumentElement.FirstChild,true);
rootNode.AppendChild( NewNodeEntry );

//Save XML document
xmlDoc.Save(Server.MapPath("books.xml"));
Avatar billede nute Nybegynder
15. april 2002 - 19:10 #12
fino !! :-)

takk for point...
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