ホームページ > バックエンド開発 > C++ > XSLT 変換で StackOverflowExceptions を防止および処理するにはどうすればよいですか?

XSLT 変換で StackOverflowExceptions を防止および処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-21 01:46:09
オリジナル
950 人が閲覧しました

How to Prevent and Handle StackOverflowExceptions in XSLT Transformations?

XslTransform 呼び出しでの StackOverflowException の防止と処理

Xsl エディターで XslCompiledTransform.Transform メソッドを使用すると、ユーザー指定の Xsl スクリプトでの無限再帰により StackOverflowException が発生する場合があります。この問題を解決するには、次の点を考慮してください:

検出と予防:

Microsoft によると、.NET Framework 2.0 以降、StackOverflowExceptiontry-catch ブロックに捕捉できず、プロセスが終了します。したがって、スタック オーバーフローを検出して防止するコードを実装することをお勧めします。

考えられるアプローチの 1 つは、再帰ループを終了するためのカウンターまたはステータス条件を含めることです。ただし、再帰が Xsl スクリプトによって制御されている場合、これは現実的ではない可能性があります。

代替プロセス:

もう 1 つのオプションは、XslTransform コードを別のプロセスに読み込むことです。これにより、メイン アプリケーションに影響を与えることなく、変換プロセスを分離し、例外から回復できます。

これを行うには:

  1. 変換操作用の Process クラスを使用して新しいプロセスを作成します。
  2. StartInfo 属性を設定して、実行するアセンブリを指定し、非表示のプロセスとして実行します。
  3. Start() を呼び出して変換を開始します。
  4. WaitForExit() を使用して、変換プロセスが完了するまで待ちます。
  5. ExitCode 属性をチェックして、StackOverflowException が発生したかどうかを確認します。これが発生した場合、ユーザーにエラーが表示されます。

サンプルコード:

メインプロセス:

<code class="language-csharp">Process p1 = new Process();
p1.StartInfo.FileName = "ApplyTransform.exe";
p1.StartInfo.UseShellExecute = false;
p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

p1.Start();
p1.WaitForExit();

if (p1.ExitCode == 1)
   Console.WriteLine("StackOverflow was thrown");</code>
ログイン後にコピー

ApplyTransform プロセス:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        throw new StackOverflowException();
    }

    // 处理未处理的异常并以退出代码 1 退出
    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        if (e.IsTerminating)
        {
            Environment.Exit(1);
        }
    }
}</code>
ログイン後にコピー

これらのメソッドを実装すると、XslTransform 呼び出しでの無限再帰によって引き起こされる StackOverflowException を効果的に防止または処理できます。

以上がXSLT 変換で StackOverflowExceptions を防止および処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート