我正在使用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,但这似乎是一个错误的方法去做。
编辑 - 根据您的补充信息,我很肯定加载到列表中会更快.....您需要尝试一下才能再次检查,但如果您需要它反正另一种格式,你也可以。
首先检查您是否没有使用低效率的节点选择方式,例如//节点可能是值得的。