Glengamoi · AspHeute (Artikel) · .NET Heute (RSS-Suche) · .NET Blogs · Glengamoi Suche (Installieren via Klick)

Glengamoi

Die Diskussionsforen der deutschen .NET Community
Willkommen bei Glengamoi. Anmeldung | Registrieren | Hilfe
in Suchen

Knoten in XML einfügen

Letzter Beitrag 09-07-2008 20:04 von ChristophSchmid. 5 Antworten.
Seite 1 von 1 (6 Treffer)
Beiträge sortieren: Zurück Weiter
  • 09-07-2008 12:17

    Knoten in XML einfügen

     Hallo

     Ich möchte mit InsertAfter einen Knoten in ein bestehendes XMLDocuent einfügen, was nicht klappt und mit dem Fehler "Der Verweisknoten ist diesem Knoten nicht untergeordnet" abbricht.

     Das XML sieht in etwa wie folgt aus:

    <Page>
       <Row>
          <Field>
            <Name>Test1</Name>
            <Typ>Input</Typ>
         </Field>
          <Field>
            <Name>Test2</Name>
            <Typ>Input</Typ>
         </Field>
          <Field>
            <Name>Test3</Name>
            <Typ>Input</Typ>
         </Field>
      </Row>
    </Page>

    Mit selectSingleNode("//Row/Field[Name='Test2']") lade ich den gewünschten Knoten. Nach diesem Knoten soll jetzt ein neuer Knoten Field mit z.B. NameTes2.5 eingefügt werden.Beim InsertAt mit der Knoten über selectSingeNode und dem neuen Knoten gibt es dann die Fehler von oben.

    Jemand einen Tipp?

     

    Gruss Christoph

     

    • IP-Adresse ist Registriert
  • 09-07-2008 13:50 Antwort zu

    AW: Knoten in XML einfügen

    wie hast Du denn den neuen Knoten erstellt?

    Auch Dein Xpath ist anders als ich es kenne ... ;-) also falsch.

    Richtig wäre: Dim xNode As XmlNode = doc.DocumentElement.SelectSingleNode("//Row/Field/Name[text()='Test2']")

    Dann kannst Du insertAfter nur mit dem Parent des referenceChild machen also Wenn xNode der Knoten ist, nachdem der neue kommen soll::
         xNode.ParentNode.InsertAfter(newNode, xNode)

    Aber wenn Du gerade erst mit XML anängst ae ich Dir Dir di XLinq Sachen anzuschauen. Das ist wirklich geil!
    http://www.asp.net/learn/linq-videos/video-215.aspx

     http://www.asp.net/learn/linq-videos/video-216.aspx

     

    Hier nochmal die Testroutine

     

    Chris

     

    Sub Main()
       
    Dim xmlString As String = " <Page><Row><Field><Name>Test1</Name><Typ>Input</Typ></Field><Field><Name>Test2</Name><Typ>Input</Typ></Field><Field><Name>Test3</Name><Typ>Input</Typ></Field></Row></Page>"
       
    Dim doc As New XmlDocument

        doc.LoadXml(xmlString)
       
    Dim xNode As XmlNode = doc.DocumentElement.SelectSingleNode("//Row/Field/Name[text()='Test2']")

        If Not xNode Is Nothing Then
            Dim newNode As XmlNode = xNode.OwnerDocument.CreateElement("Name")
            newNode.InnerText =
    "NameTes2.5"
           
    xNode.ParentNode.InsertAfter(newNode, xNode)
       
    End If

    End Sub

     

    • IP-Adresse ist Registriert
  • 09-07-2008 18:39 Antwort zu

    Re: AW: Knoten in XML einfügen

    Hallo ChrisAlso, nur weil du es nicht kennst, muss es ja nicht falsch sein :-)Mit meinem Xpath bekomme ich gleich den Field-Knoten, mit deinem denNamen-Knoten und erst mit ParentNode den Field-Knoten.Was aber falsch war, ist das InsertAfter. Da habe ich dasXMLDocument.InsertAfter... genommen, weil ich dachte, mit dem RefNodegebe man dann an, wo das eingefügt werden soll.So wie bei dir funktioniert es jetzt.Besten DankXLing geht leider nicht, weil das dann als Modul Kunden und Partnernverkauft wird und nicht überall 3.5 vorausgesetzt werden kann.Gruss ChristophChris Cluss schrieb:>> wie hast Du denn den neuen Knoten erstellt?>> Auch Dein Xpath ist anders als ich es kenne ... ;-) also falsch.>> Richtig wäre: Dim xNode As XmlNode => doc.DocumentElement.SelectSingleNode("//Row/Field/Name[text()='Test2']")>> Dann kannst Du insertAfter nur mit dem Parent des referenceChild> machen also Wenn xNode der Knoten ist, nachdem der neue kommen soll::> xNode.ParentNode.InsertAfter(newNode, xNode)>> Aber wenn Du gerade erst mit XML anängst ae ich Dir Dir di XLinq> Sachen anzuschauen. Das ist wirklich geil!> http://www.asp.net/learn/linq-videos/video-215.aspx>> http://www.asp.net/learn/linq-videos/video-216.aspx>> >> Hier nochmal die Testroutine>> >> Chris>> >> Sub Main()> Dim xmlString As String = "> Test1InputTest2InputTest3Input"> Dim doc As New XmlDocument>> doc.LoadXml(xmlString)> Dim xNode As XmlNode => doc.DocumentElement.SelectSingleNode("//Row/Field/Name[text()='Test2']")>> If Not xNode Is Nothing Then> Dim newNode As XmlNode = xNode.OwnerDocument.CreateElement("Name")> newNode.InnerText = "NameTes2.5"> xNode.ParentNode.InsertAfter(newNode, xNode)> End If>> End Sub>> >>>>
    • IP-Adresse ist Registriert
  • 09-07-2008 18:44 Antwort zu

    Re: AW: Knoten in XML einfügen

    Hallo Chris
    So, jetzt noch als leserliches Mail über die Webseite(bin mich halt immer noch gewohnt, dass per EMail zu machen). 
    Also, nur weil du es nicht kennst, muss es ja nicht falsch sein :-)
    Mit meinem Xpath bekomme ich gleich den Field-Knoten, mit deinem denNamen-Knoten und erst mit ParentNode den Field-Knoten.
    Was aber falsch war, ist das InsertAfter. Da habe ich dasXMLDocument.InsertAfter... genommen, weil ich dachte, mit dem RefNodegebe man dann an, wo das eingefügt werden soll.
    So wie bei dir funktioniert es jetzt.
    Besten Dank
    XLing geht leider nicht, weil das dann als Modul Kunden und Partnernverkauft wird und nicht überall 3.5 vorausgesetzt werden kann.
     
    Gruss Christoph
    • IP-Adresse ist Registriert
  • 09-07-2008 18:52 Antwort zu

    AW: Re: AW: Knoten in XML einfügen

    Danke für die leserliche Version ;-)

    Ich dachte mir schon, dass Dein Xpath funktioniert.... sonst wäre Deine Frage sicherlich anders gewesen.

    Ich habe die letzten Jahre viel XML gemacht und bin schwer von xLinq beeindruckt.
    Aber wenns nicht geht ....

    Schau Dir trotzdem aml die kurze Einleitung an. Das wird Dich auch begeistern.

    • IP-Adresse ist Registriert
  • 09-07-2008 20:04 Antwort zu

    Re: AW: Re: AW: Knoten in XML einfügen

     Werde mir die Filme noch anschauen.

    Gruss Christoph

    • IP-Adresse ist Registriert
Seite 1 von 1 (6 Treffer)