2009-03-23 8 views
1

Mein Code:Erstellen einer übergeordneten Knoten für XML-Dokument in C#

// Read in Xml-file 
XmlDocument doc = new XmlDocument(); 
doc.Load("C:/Web.config"); 

XmlNode d = doc.SelectSingleNode("/configuration"); 
XmlNode MYNODE = doc.CreateNode("element", "connectionStrings", ""); 

//newParent.(childNode); 
d.AppendChild(MYNODE); 

//Saving the document 
doc.Save("C:/Web.config"); 

MyOutput in meinem Web.config:

<connectionStrings /> 

Die Ausgabe, die ich eigentlich in meinem Web.config wollen:

<connectionStrings> 

</connectionStrings> 

Was muss ich in meinem Code ändern, um die richtige Ausgabe zu erhalten? Was muss ich tun, wenn meine Tags nur über einem anderen Tag angezeigt werden sollen? Sagen Sie mir --SharePoint-- Tag.

Grüße Etienne

+0

Re auf Ihre Frage; etwas wie: sharePoint.InsertAfter (MYNODE); –

Antwort

1

beide sind gut ausgebildete XML-Formate.

Wenn Sie jedoch neue Childs zu Ihrem angehängten Child-Knoten hinzufügen, erhalten Sie, was Sie wollen. Zum Beispiel gerade einen Raum in den Knoten hinzufügen connection:

XmlNode MYNODE = doc.CreateNode("element", "connectionStrings", ""); 
MYNODE.InnerText = " "; 

dies keine Wirkung bei der tatsächlichen Verwendung von Verbindungszeichenelemente haben .. aber die Ausgabe wird sein, wie Sie wollen.

+0

Danke !! Ai dumm mir! – Etienne

2

Der Ausgang ist richtig. Da Sie innerhalb des Tags connectionStrings keine untergeordneten Elemente haben, wird es als leeres Tag dargestellt.

<connectionStrings /> bedeutet dasselbe wie <connectionStrings></connectionStrings>.

Wenn Sie einen Tag vor einem bestimmten Knoten einfügen möchten, verwenden Sie die InsertBefore Methode:

XmlNode sharePoint = doc.SelectSingleNode("SharePoint"); 
XmlNode MYNODE = doc.CreateNode("element", "connectionStrings", ""); 

doc.InsertBefore(MYNODE, sharePoint); 
+0

Verwenden von doc.InsertBefore (MYNODE, sharePoint); funktioniert nicht? – Etienne

1

Sowohl die <ConnectionStrings> scheint gleich. Es gibt keinen Unterschied in <connectionStrings /> und <connectionStrings></connectionStrings>.

Sie AppendChild() oder InsertBefore() oder InsertAfter() Methoden verwenden, können Sie Ihre Knoten zu positionieren.

1

Sie könnten vielleicht etwas Leerraumtext in das Element einfügen?

MYNODE.InnerText = " "; 

Oder ein anderer Inhalt - vielleicht ein Kommentar? Ohne Inhalt sind die beiden Formen ziemlich identisch.

Re der „tag“ Frage - das, was Sie hängt bedeuten ... aber XmlNode hat InsertBefore und InsertAfter - nur den Knoten finden Sie es benachbart sein wollen und einer von denen zu verwenden.

+0

Danke für die Antwort .... wie würde ich die InsertBefore in meinem Code verwenden .... Ich habe ein paar Dinge versucht, aber immer einen Fehler bekommen. – Etienne

+0

versuchen sharePoint.InsertAfter (MYNODE); –

+0

Nein, Fehler sagen: "Keine Überladung für Methode InsertBefore dauert '1' arfument – Etienne

0
XmlNode root = doc.DocumentElement; 
root.InsertAfter(connNODE, root.FirstChild); 

Dies ist, was ich tun musste, um meinen Knoten an der richtigen Stelle zu platzieren. Vielen Dank für Ihre Hilfe! Etienne

0

Leider seine spät, aber mich nicht halten kann diesen Beitrag zu antworten:

XmlNode xNode = xDoc.CreateNode("element", "FundDetails", ""); // Parent node to insert 
xDoc.InsertBefore(xNode, xDoc.ParentNode); // inserting parent node to existing XML document 
0

dieser Code Hilfe Elternknoten mehr Daten, die aus der Datenbank erhalten.

XmlNode dataNode = doc.CreateNode(XmlNodeType.Element, "connectionstrings", null); 
       root.PrependChild(dataNode); 
       for (int i = 1; i < root.ChildNodes.Count; i++) 
       { 
        dataNode.AppendChild(root.ChildNodes[i]); 
        i--; 
       } 

, wenn Sie Ihre Ihr hängten untergeordneten Knoten neue Childs hinzufügen, werden Sie bekommen, was Sie wollen. Zum Beispiel fügen Sie einfach NULL in den Connections-String-Knoten ein.