2009-09-10 8 views
1

J'ai un XmlDocument provenant d'un service Web et je souhaite utiliser un sous-ensemble de xml pour remplir un contrôle Gridview. Malheureusement, il contient des données supplémentaires dont je n'ai pas besoin. Je veux donc créer un nouveau XmlDocument à partir d'un sous-ensemble du document XML existant. Fondamentalement, je veux créer un nouveau XmlDocument avec le comme l'élément racine. Ci-dessous un exemple raccourci de la doc xml d'origine:Création d'un XmlDocument à partir de données XmlDocument existantes dans Asp.Net

<?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> 

Code Anthony m'a aidé à pointer dans la bonne direction, mais c'est ce qui est réellement travaillé pour moi.

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(); 
+0

Vous voulez "créer un nouveau XmlDocument avec [quoi] comme élément racine"? S'il vous plaît corriger typo pour plus de clarté. –

+0

@ GreenEggs: Matt Ball signifiait: vous accidentellement pas les crochets. – Residuum

Répondre

2

Qu'est-ce que vous avez besoin est ImportNode: -

XmlDocument xmlDoc = Object.ReturnsXmlDocument; 
XmlDocument xmlResults = new XmlDocument(); 
xmlResults.AppendNode(xmlResults.ImportNode(xmlDoc.SelectSingleNode("/xml/results")); 
1

Untested, mais cela devrait être sacrément proche:

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

Et vous pouvez faire tout ce que vous devez le XmlWriter - Je ne suis pas sûr si vous essayez de créer les résultats XmlDocument sur le disque ou non.

Questions connexes