2011-11-04 52 views
1

如果這是一個明顯的問題,我很抱歉,但我很高興嘗試找到答案。XmlDocument就地轉換XSL

我可以在加載的XmlDocument上執行XSL轉換嗎?也就是說,不需要爲文檔創建一個作者?

我問,因爲我有我想排序的WPF應用程序內的XmlDocument綁定。這種排序可能會有點複雜,所以XSL似乎很適合。下面是我被困在代碼:

XmlDataProvider xmlDP = (XmlDataProvider)this.Resources["ItemDB"]; 
string xsltPath = System.Configuration.ConfigurationManager.AppSettings["XSLDirextory"]; 
string path = xsltPath + "SortItemName.xslt"; 
if (System.IO.File.Exists(path)) 
{ 
    XslCompiledTransform compTrans = new XslCompiledTransform(); 
    compTrans.Load(path); 
    //compTrans.Transform(xmlDP.Document, new XsltArgumentList(), xmlDP.Document.XmlResolver); 
} 

加載變換後,我想只能夠compTrans(xmlDP.Document);或者具有相同效果的東西。 (要清楚,xmlDP.Document是一個XmlDocument),以便XmlDocument具有變換的結果。

完成此操作的最佳方法是什麼?

+0

爲什麼你不想創建一個寫入文檔?實際上,爲什麼不從文檔轉換到另一個文檔,然後綁定新文檔呢? –

+0

我不想寫回文檔,因爲內存拷貝可能存在一些差異。如果用戶關閉應用程序,我不希望這些編輯被反映回實際的文檔中,除非用戶明確保存到該文檔中。至於創建一個新文檔,我想我可以,但似乎應該有一個更好的方法來做到這一點。 – Megatron

回答

2

您可以做的最接近的是創建一個新的XmlDocument與例如

XmlDocument result = new XmlDocument(); 
using (XmlWriter xw = result.CreateNavigator().AppendChild()) 
{ 
    compTrans.Transform(xmlDP.Document, null, xw); 
    xw.Close(); 
} 

,然後賦值給你的財產:

xmlDP.Document = result; 

當然,這需要xmlDP.Document可設置。

0

XSLT總是創建一個新文檔來保存轉換結果,它永遠不會修改輸入文檔。