2008-10-31 148 views

回答

1

使用XslCompiledTransform執行xsl,但請確保緩存XslCompiledTransform,因爲編譯速度慢,執行速度非常快。

所以:

  1. 寫你的XML相匹配的XSL,它們排序,並有排序列表作爲輸出
  2. 獲取XslCompiledTransform拿着從緩存XSL,如果它不存在,創建它並插入到緩存
  3. 轉換XML通過您的XSL到一個新的XmlDocument

這是血腥快,讓你的代碼乾淨,你是靈活的,當談到改變日e分類實施;它只是編輯一個xsl。

我沒有檢查它所以有可能是拼寫錯誤的類型這一點,但,這是你應該如何去:

XslCompiledTransform xsl = (XslCompiledTransform)HttpRuntime.Cache.Get("my_xsl"); 
if (xsl == null) 
{ 
    string fileName = "path/to/your/xslfile.xsl"; 
    xsl = new XslCompiledTransform(); 
    xsl.Load(fileName); 
    HttpRuntime.Cache.Insert("my_xsl", xsl, new CacheDependency(new string[]{fileName})); 
} 

而且在某處變換使用的方法是這樣的:

public static XmlNode TransformToXml(IXPathNavigable xml, XslCompiledTransform xsl, XsltArgumentList arguments, XmlWriterSettings settings) 
{ 
    XmlDocument output = new XmlDocument(); 
    using (XmlWriter writer = XmlWriter.Create(output.CreateNavigator().AppendChild())) 
    { 
    xsl.Transform(xml, arguments, writer); 
    } 
    return output; 
} 
1

根據我的經驗,XSL是更好的方法之一,但是,當您處理大型輸入文件時,總體速度有點粗略。

你可以推出自己的排序,但老實說,我不認爲它會更快。

我能想到的唯一其他可能的選擇是加載到一個數據視圖或其他東西並在那裏排序,然後返回到XML,但這似乎是一個錯誤的方法去做。

編輯 - 根據您的補充信息,我很肯定加載到列表中會更快.....您需要嘗試一下才能再次檢查,但如果您需要它反正另一種格式,你也可以。

1

首先檢查您是否沒有使用低效率的節點選擇方式,例如//節點可能是值得的。

相關問題