从Asp.Net中的现有XmlDocument数据创建新的XmlDocument

时间:2009-09-10 15:46:38

标签: c# asp.net xml xmldocument

我有一个来自Web服务的XmlDocument,我想使用xml的一个子集来填充Gridview控件。不幸的是,它包含我不需要的额外数据。所以我想从现有xml文档的子集创建一个新的XmlDocument。

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

基本上,我想用as作为根元素创建一个新的XmlDocument。以下是原始xml doc的缩写示例:

<?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 个答案:

答案 0 :(得分:2)

您需要的是ImportNode: -

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

答案 1 :(得分:1)

未经测试,但这应该非常接近:

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。