2009-09-10 26 views
1

我有一個來自web服務的XmlDocument,我想使用xml的子集來填充Gridview控件。不幸的是,它包含了我不需要的額外數據。所以我想從現有的xml文檔的一個子集創建一個新的XmlDocument。從Asp.Net中現有的XmlDocument數據創建新的XmlDocument

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

你想「用[作爲根元素]創建一個新的XmlDocument」?爲了清晰起見,請修復錯字。 – 2009-09-10 15:52:46

+0

@GreenEg​​gs:馬特球意味着:你不小心沒有括號。 – Residuum 2009-09-10 16:03:30

回答

2

你需要的是ImportNode: -

XmlDocument xmlDoc = Object.ReturnsXmlDocument; 
XmlDocument xmlResults = new XmlDocument(); 
xmlResults.AppendNode(xmlResults.ImportNode(xmlDoc.SelectSingleNode("/xml/results")); 
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。