2009-08-04 14 views
1

Wie füge ich einem bestimmten übergeordneten Knoten in einer XML-Datei ein anderes Element/childnode hinzu?Bearbeiten einer XML-Datei?

Speziell ein neues Videoobjekt zum Medienknoten. Ich möchte dies drehen:

<?xml version="1.0" encoding="utf-8" ?> 
<media> 
    <Video name="Gladiator"> 
     <English>path1</English> 
     <Chinese>path2</Cinese> 
     <French>path3</French> 
    </Video> 
    <Video name="Transformers"> 
     <English>path4</English> 
     <Chinese>path5</Cinese> 
     <French>path6</French> 
    </Video> 
</media> 

in dieser:

<?xml version="1.0" encoding="utf-8" ?> 
<media> 
    <Video name="Gladiator"> 
     <English>path1</English> 
     <Chinese>path2</Cinese> 
     <French>path3</French> 
    </Video> 
    <Video name="Transformers"> 
     <English>path4</English> 
     <Chinese>path5</Cinese> 
     <French>path6</French> 
    </Video> 
    <Video name="Terminator"> 
     <English>path7</English> 
     <Chinese>path8</Cinese> 
     <French>path9</French> 
    </Video> 
</media> 

Wenn ich einen XmlTextWriter öffnen, erstellen Sie einen neuen Element-Tag, Attribute hinzufügen und den Element-Tag beenden; es löscht alle vorherigen Daten in der Textdatei:/

Antwort

3

Wenn Sie die Klasse XmlTextWriter verwenden, müssen Sie Ihre XML-Datei lesen, um den Inhalt vor der Verwendung von XmlTextWriter zu erhalten. XmlTextWriter lädt den Inhalt Ihrer XML-Datei nicht. Deshalb sind alle deine vorherigen Daten weg.

XmlDocument ist die einfachste Möglichkeit, einen neuen Knoten hinzuzufügen.

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(filePath); 

XmlNode node = FindYourNode(xmlDoc); //Method to find the specific node 
node.AppendChild(yourNewXmlNode); 

xmlDoc.Save(filePath); 

Wenn Ihre XML-Datei klein ist, ist die Klasse XmlDocument völlig in Ordnung. Wenn Sie jedoch eine große XML-Datei bearbeiten müssen, würde ich vorschlagen, eine andere Klasse zu verwenden, da XmlDocument Ihre Leistung beeinträchtigen kann.

In diesem Fall würde ich eine Kombination aus XmlReader und XmlWriter verwenden.

+0

gute Erklärung, +1 –

+0

Danke, dass Sie mir geholfen haben, die vollständige Antwort zu finden: http://www.java2s.com/Code/CSharp/XML/AppendChild.htm –

0

ich etwas in diese Richtung tun würde:

mediaElement.AppendChild(xmlDocument.CreateElement("Video")) 

Wo Media ein Verweis auf das < media/> Element ist und XmlDocument ist vom Typ XmlDocument.

+0

Denken ohne Voraussetzungen bekannt, der TS weiß nicht einmal, warum sein Versuch löscht die Daten aus der Datei, wie sollte er wissen, wie das "MediaElement" als Verweis auf das Tag erstellen. daher -1 –