1

XSL スタイル シートを使用して並べ替えを行っていましたが、非常に遅いようです。より効率的な方法はありますか?

これはノードのフラット リストです。ノードをオブジェクトに変換し、GenericList で並べ替えると役立ちますか?

編集最終結果が XML である必要はありません。

4

3 に答える 3

1

XslCompiledTransform を使用して xsl で実行しますが、コンパイルが遅く、実行が非常に高速であるため、必ず XslCompiledTransform をキャッシュしてください。

そう:

  1. あなたのxmlに一致するxslを書き、それらをソートし、ソートされたリストを出力として持っていました
  2. その xsl を保持している XslCompiledTransform をキャッシュから取得し、存在しない場合は作成してキャッシュに挿入します。
  3. xsl を介して xml を新しい XmlDocument に変換します

これは非常に高速で、コードをクリーンに保ち、並べ替えの実装を変更する際に柔軟に対応できます。単一の 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;
}
于 2008-10-31T15:43:55.157 に答える
1

ノードを選択する非効率的な方法 (//node.

于 2008-10-31T14:21:27.023 に答える
1

私の経験では、XSL は最適な方法の 1 つですが、大きな入力ファイルを扱うようになると、全体的な速度は少し不安定になります。

独自の並べ替えを行うこともできますが、正直なところ、それよりも速くなるとは思いません。

私が考えることができる他の唯一の可能なオプションは、データビューまたは何かにロードしてそこでソートし、XMLに戻すことですが、それは間違った方法のようです.

編集-追加された情報に基づいて、はい、リストへのロードがはるかに高速になると確信しています....再確認するために試してみる必要がありますが、とにかく別の形式で必要な場合は、そうかもしれません。

于 2008-10-31T14:15:44.583 に答える