Создать новый XmlDocument из существующих данных XmlDocument в Asp.Net - PullRequest
1 голос
/ 10 сентября 2009

У меня есть XmlDocument из веб-сервиса, и я хочу использовать подмножество xml для заполнения элемента управления Gridview. К сожалению, он содержит дополнительные данные, которые мне не нужны. Поэтому я хочу создать новый XmlDocument из подмножества существующего XML-документа.

protected void Page_Load(object sender, EventArgs e)
{
   XmlDocument xmlDoc = Object.ReturnsXmlDocument;
   XmlDocument xmlDocResults = ???  //<results><result></result></results>
}

По сути, я хочу создать новый XmlDocument с корневым элементом. Ниже приведен сокращенный пример оригинального документа XML:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
   <query_time>.12</query_time>
   <number_results>3</number_results>
   <results>
     <result><id>1</id></result>
     <result><id>2</id></result>
     <result><id>3</id> </result>
   </results>
</xml>

Код Энтони помог мне указать верное направление, но это то, что на самом деле сработало для меня.

XmlDocument xmlResults = new XmlDocument();
    XmlDeclaration xmlDec = xmlResults.CreateXmlDeclaration("1.0", "utf-8", null);
    XmlElement rootNode = xmlResults.CreateElement("results");
    xmlResults.InsertBefore(xmlDec, xmlResults.DocumentElement);
    xmlResults.AppendChild(rootNode);

    XmlNode node = xmlDoc.GetElementsByTagName("results")[0];

    xmlResults.GetElementsByTagName("results")[0].InnerXml = node.InnerXml.ToString();

Ответы [ 2 ]

2 голосов
/ 10 сентября 2009

Что вам нужно, это ImportNode: -

XmlDocument xmlDoc = Object.ReturnsXmlDocument;
XmlDocument xmlResults = new XmlDocument();
xmlResults.AppendNode(xmlResults.ImportNode(xmlDoc.SelectSingleNode("/xml/results"));
1 голос
/ 10 сентября 2009

Не проверено, но это должно быть чертовски близко:

XPathDocument original = new XPathDocument("original.xml");
XPathNavigator navigator = original.CreateNavigator();
navigator.MoveToChild("results", "");
XmlWriter results = XmlWriter.Create("results.xml");
navigator.WriteSubtree(results);
results.Close();

И тогда вы можете делать все, что вам нужно, с XmlWriter - я не уверен, пытаетесь ли вы создать результаты XmlDocument на диске или нет.

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