Создание родительского узла для документа XML в C # - PullRequest
1 голос
/ 23 марта 2009

Мой код:

// 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 в моем Web.config:

<connectionStrings />

Вывод, который я на самом деле хочу в моем Web.config:

<connectionStrings>

</connectionStrings>

Что я должен изменить в своем коде, чтобы получить правильный вывод? Кроме того, что я должен делать, если я хочу, чтобы мои теги появлялись прямо над другим тегом ... Скажите, мой тег --SharePoint--.

С уважением Etienne

Ответы [ 7 ]

2 голосов
/ 23 марта 2009

Вывод правильный. Поскольку у вас нет дочерних элементов в теге connectionStrings, он отображается как пустой тег.

<connectionStrings /> означает то же самое, что и <connectionStrings></connectionStrings>.

Если вы хотите вставить тег перед определенным узлом, используйте метод InsertBefore:

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

doc.InsertBefore(MYNODE, sharePoint);
1 голос
/ 23 марта 2009

оба они являются хорошо сформированными форматами XML.

но если вы добавите новых дочерних узлов в свой дочерний узел, вы получите то, что хотите. Например, просто добавьте пробел в узел строки подключения:

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

это не повлияет на фактическое использование элементов строки подключения .. но вывод будет таким, как вы хотите.

1 голос
/ 23 марта 2009

Вы могли бы добавить какой-нибудь пробельный текст в элемент?

MYNODE.InnerText = " ";

Или какой-то другой контент - возможно, комментарий? Без некоторого содержания эти две формы в значительной степени идентичны.

Отвечайте на вопрос "tag" - это зависит от того, что вы имеете в виду ... но XmlNode имеет InsertBefore и InsertAfter - просто найдите узел, к которому вы хотите, чтобы он был рядом, и используйте один из них.

1 голос
/ 23 марта 2009

Оба <ConnectionStrings> кажутся одинаковыми. Нет никакой разницы в <connectionStrings /> и <connectionStrings></connectionStrings>.

Вы можете использовать AppendChild() или InsertBefore() или InsertAfter() методы для позиционирования ваших узлов.

0 голосов
/ 05 июня 2013

этот код помогает родительскому узлу получать больше данных из базы данных.

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

если вы добавите новых потомков в свой дочерний узел, вы получите то, что хотите. Например, просто добавьте NULL в узел строки подключения.

0 голосов
/ 06 ноября 2012

Извините, что поздно, но не могу удержаться от ответа на этот пост:

XmlNode xNode = xDoc.CreateNode("element", "FundDetails", ""); // Parent node to insert
xDoc.InsertBefore(xNode, xDoc.ParentNode); // inserting parent node to existing XML document
0 голосов
/ 23 марта 2009
XmlNode root = doc.DocumentElement;
root.InsertAfter(connNODE, root.FirstChild);

Это то, что мне нужно было сделать в onder, чтобы разместить мой узел в правильном месте. Спасибо всем за вашу помощь! Etienne

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...