2009-03-23 10 views
1

Mon code:Création d'un nœud parent pour le document XML en 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 dans mon web.config:

<connectionStrings /> 

La sortie que je veux réellement dans mon web.config:

<connectionStrings> 

</connectionStrings> 

Que dois-je changer dans mon code pour obtenir la bonne sortie? Aussi, que dois-je faire si je veux que mes tags apparaissent juste au-dessus d'un autre tag ... Dites mon --SharePoint-- Tag.

salutations Etienne

+0

Re votre question; quelque chose comme: sharePoint.InsertAfter (MYNODE); –

Répondre

1

les deux sont des formats xml bien formés. Mais, si vous ajoutez de nouveaux fils à votre noeud enfant ajouté, vous obtiendrez ce que vous voulez. Par exemple il suffit d'ajouter un espace dans le nœud connectionStrings:

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

cela aura aucun effet dans l'utilisation réelle des éléments de chaînes de connexion .. mais la sortie sera comme vous voulez.

+0

Merci !! Ai stupide moi! – Etienne

2

La sortie est correcte. Étant donné que vous n'avez aucun élément enfant dans la balise connectionStrings, il s'affiche comme une balise vide.

<connectionStrings /> signifie la même chose que <connectionStrings></connectionStrings>.

Si vous souhaitez insérer une balise avant un nœud particulier, utilisez la méthode InsertBefore:

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

doc.InsertBefore(MYNODE, sharePoint); 
+0

Utilisation de doc.InsertBefore (MYNODE, sharePoint); ne marche pas? – Etienne

1

Tant le <ConnectionStrings> semble même. Il n'y a pas de différence dans <connectionStrings /> et <connectionStrings></connectionStrings>.

Vous pouvez utiliser AppendChild() ou InsertBefore() ou InsertAfter() méthodes pour positionner vos nœuds.

1

Vous pourriez peut-être ajouter du texte à espace blanc dans l'élément?

MYNODE.InnerText = " "; 

Ou un autre contenu - c'est un commentaire? Sans un certain contenu, les deux formes sont à peu près identiques.

Re la question « tag » - qui dépend de ce que tu veux dire ... mais XmlNode a InsertBefore et InsertAfter - juste trouver le nœud que vous voulez qu'il soit à côté et utiliser un.

+0

Merci pour la réponse .... comment pourrais-je utiliser le InsertBefore dans mon code .... j'ai essayé quelques petites choses mais continuez à obtenir une erreur. – Etienne

+0

essayez sharePoint.InsertAfter (MYNODE); –

+0

Non, erreur dire: "Aucune surcharge pour la méthode InsertBefore prend '1' arfument – Etienne

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

C'est ce que j'avais besoin de faire pour placer mon nœud au bon endroit. Merci à tous pour votre aide! Etienne

0

Désolé son retard mais ne peut pas me tenir à répondre à ce message:

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

ce code nœud parent d'aide plus de données qui obtiennent la base de données.

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--; 
       } 

si vous ajoutez à votre Childs votre noeud enfant ajouté, vous obtenez ce que vous voulez. Par exemple, ajoutez simplement NULL dans le noeud connectionstrings.

Questions connexes