Laden...

Kopie von XmlNode in XmlDocument einfügen

Erstellt von Grimmbizkit vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.525 Views
G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 7 Jahren
Kopie von XmlNode in XmlDocument einfügen

Abend zusammen,

gibt es eine Möglichkeit, das ich eine XmlNode als Object aus einem XmlDocument auslesen, dann Clone und wieder einfüge?

Folgende funktioniert bei mir nicht 😦


// Document erstellen/laden
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("test.xml");

// Node per XPath lesen
XmlNode node = xmlDoc.SelectSingleNode(String.Format("/Configuration/HvsControl/ModulConfig/Modul[@Name='{0}'][@Instance='{1}']", modulName, instance));

// Node duplizieren
XmlNode newNode = node.Clone();

// Anpassen des Inhalt
newNode.Attributes["Name"].InnerText = modName;
newNode.Attributes["Instance"].InnerText = modInstance.ToString();
newNode.Attributes["Active"].InnerText = "False";
newNode["IP"].InnerText = "0.0.0.0";
newNode["Port"].InnerText = "1111";
newNode["Scanner_ID"].InnerText = "";
newNode["Scanner_Typ"].InnerText = "";

// Hier passiert der Fehler
xmlDoc.AppendChild(newNode);

Habt ihr evtl eine Ahnung wieso?

Grüße Simon

C
2.121 Beiträge seit 2010
vor 7 Jahren

Man muss einen Node noch irgendwie - weiß ich grad nicht auswendig - dem XmlDocument zuordnen.

Hier passiert der Fehler

Nachdem du nicht verrätst welcher Fehler das ist, weiß ich nicht ob es überhaupt tatsächlich daran liegt.

3.003 Beiträge seit 2006
vor 7 Jahren

Man muss einen Node noch irgendwie - weiß ich grad nicht auswendig - dem XmlDocument zuordnen.

Genau. Indem man nicht new verwendet, sondern XmlDocument.CreateNode

LaTino.

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 7 Jahren

Morgen,

Der Fehler lautet:
"Das Dokument verfügt bereits über einen 'DocumentElemte'-Knoten"

Als kleiner Hinweis, so sieht in etwa die XML aus:


<Configuration>
    <SprachNr>0</SprachNr>
    <HvsControlHost prio="1">193.169.100.145</HvsControlHost>
    <Anmeldung_Delete>True</Anmeldung_Delete>
    <HvsControl>
        <ModulConfig>
            <Modul Active="False" Instance="1" Name="CardScan">
                <IP>10.24.5.199</IP>
                <Port>2112</Port>
                <Scanner_Typ>RFU630</Scanner_Typ>
		<Scanner_ID>1</Scanner_ID>
            </Modul>
        </ModulConfig>
    </HvsControl>
</Configuration>

Und der Bereich <Modul Active=......... soll kopiert/Dupliziert werden (aus Instance dann "2") und in die Xml Schreiben.

3.003 Beiträge seit 2006
vor 7 Jahren

Der Fehler lautet:
"Das Dokument verfügt bereits über einen 'DocumentElemte'-Knoten"

Oje. Gut, dass chilic nachgefragt hat. Du versuchst, defektes XML zu bauen. Häng den neuen Knoten dort ein, wo er hingehört, und versuch ihn nicht als Root-Knoten einzuhängen.

Konkret ist der Fehler hier:


xmlDoc.AppendChild(newNode);
//stattdessen:
node.ParentNode.AppendChild(newNode);

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)