我正在使用XSL樣式表進行排序,但它似乎很慢。有沒有更高效的方法?在XmlDocument中排序節點的最佳方法是什麼? (.Net)
它是一個節點的平面列表,如果我將節點轉換爲對象並在GenericList中排序會有幫助嗎?
編輯我不需要最終的結果是XML。
我正在使用XSL樣式表進行排序,但它似乎很慢。有沒有更高效的方法?在XmlDocument中排序節點的最佳方法是什麼? (.Net)
它是一個節點的平面列表,如果我將節點轉換爲對象並在GenericList中排序會有幫助嗎?
編輯我不需要最終的結果是XML。
使用XslCompiledTransform執行xsl,但請確保緩存XslCompiledTransform,因爲編譯速度慢,執行速度非常快。
所以:
這是血腥快,讓你的代碼乾淨,你是靈活的,當談到改變日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;
}
根據我的經驗,XSL是更好的方法之一,但是,當您處理大型輸入文件時,總體速度有點粗略。
你可以推出自己的排序,但老實說,我不認爲它會更快。
我能想到的唯一其他可能的選擇是加載到一個數據視圖或其他東西並在那裏排序,然後返回到XML,但這似乎是一個錯誤的方法去做。
編輯 - 根據您的補充信息,我很肯定加載到列表中會更快.....您需要嘗試一下才能再次檢查,但如果您需要它反正另一種格式,你也可以。
首先檢查您是否沒有使用低效率的節點選擇方式,例如//節點可能是值得的。