Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对XmlDocument中的节点进行排序的最佳方法是什么?(.Net)_.net_Sorting_Xmldocument - Fatal编程技术网

对XmlDocument中的节点进行排序的最佳方法是什么?(.Net)

对XmlDocument中的节点进行排序的最佳方法是什么?(.Net),.net,sorting,xmldocument,.net,Sorting,Xmldocument,我使用XSL样式表进行排序,但似乎速度非常慢。有没有更有效的方法 这是一个节点的平面列表,如果我将节点转换为一个对象并在GenericList中排序,会有帮助吗 编辑我不需要最终结果是XML。根据我的经验,XSL是一种更好的方法,但是,在处理大型输入文件时,总体速度有点粗略 你可以自己做,但老实说,我不认为会更快 我能想到的唯一其他可能的选择是加载到dataview或其他东西中并在那里对其排序,然后返回到XML,但这似乎是一种错误的方法 编辑-根据您添加的信息,是的,我很确定加载到列表中会快得多

我使用XSL样式表进行排序,但似乎速度非常慢。有没有更有效的方法

这是一个节点的平面列表,如果我将节点转换为一个对象并在GenericList中排序,会有帮助吗


编辑我不需要最终结果是XML。

根据我的经验,XSL是一种更好的方法,但是,在处理大型输入文件时,总体速度有点粗略

你可以自己做,但老实说,我不认为会更快

我能想到的唯一其他可能的选择是加载到dataview或其他东西中并在那里对其排序,然后返回到XML,但这似乎是一种错误的方法


编辑-根据您添加的信息,是的,我很确定加载到列表中会快得多……您需要尝试再次检查,但如果您需要另一种格式,您也可以这样做。

首先检查您是否使用了低效的节点选择方法,例如//node.

使用XslCompiledTransform使用xsl进行转换,但要确保缓存XslCompiledTransform,因为编译速度慢,执行速度极快

因此:

  • 编写一个与xml匹配的xsl,对它们进行排序,并将排序后的列表作为输出
  • 从缓存中获取保存该xsl的XslCompiledTransform,如果它不存在,则创建它并插入到缓存中
  • 通过xsl将xml转换为新的xml文档
  • 这是非常快的,保持你的代码干净,并且在改变排序实现时你是灵活的;它只是编辑一个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;
    }