2008-10-31 124 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

首先检查您是否没有使用低效率的节点选择方式,例如//节点可能是值得的。