2009-05-06 13 views
11

XSLTスタイルシートを編集する必要がありますが、XML入力が多数のストリームにしか存在しないため、私は盲目的に飛んでいます。私はコードにデバッグすることができますが、私は見ることができるテキストにストリームの内容を取得する(と私はそれらを編集している間にXSLTを手動で実行する)方法を把握することはできません。Visual Studio 2003でデバッガからXMLストリームを検査する方法

このコードは大きな古いレガシーシステムの一部ですが、必要な場合はデバッグ環境で修正できますが、MSMQの束に接続されたWindowsサービスで実行されます。だから、いろいろな理由から、コードを最初に変更することなく、デバッガを使ってXMLを見ることができます。

コードは非常に、単純化されたこのようなものである:(C#の - しかし、それはVS 2003で.NET 1.1だ覚えている)。これは、その後、いくつかの並べ替えに供給されたストリームとしてXMLを取得する機能がある

XSLT変換オブジェクトの私は、ウォッチウィンドウとイミディエイトウィンドウでwriterオブジェクトとxmlStreamオブジェクトを調べてみましたが、実際のXMLをどのように見えるかは十分には分かりません。

private MemoryStream GetXml() 
{ 
    MemoryStream xmlStream; 
    xmlStream = new MemoryStream(); 
    XmlWriter writer = new XmlTextWriter(xmlStream, Encoding.UTF8); 
    writer.WriteStartDocument(); 
    //etc etc... 
    writer.WriteEndDocument(); 
    writer.Flush(); 
    xmlStream.Position = 0; 
    return xmlStream; //Goes off to XSLT transform thingy! 
} 

すべてのご協力をいただきました。

答えて

14

のMemoryStreamの準備ができた後、あなたは、単にあなたのウォッチウィンドウにこの式を追加することができます。

(new StreamReader(xmlStream)).ReadToEnd(); 

ウォッチ式は、単純な変数の値である必要はありません。複雑な表現でも構いませんが、副作用があります。ストリームの内容は完全に読み出されるので、これは実行を中断します。実行を再開する必要がある場合は、中断後のストリームを別の式で再作成することができます。

このような状況は、ストリームを使用してコードをデバッグする場合に頻繁に発生するため、シンプルで自立したタスクでは発生しません。残念ながら、大規模なシステムでは、コードの使用方法に大きく依存するため、コードをストリーム指向にするかどうかを事前に知ることは必ずしも容易ではありません。しかし、多くの場合、ストリームの使用は時期尚早の最適化と考えられます。

+2

私が行ったように、この回答をGoogleに伝える人は、ストリームポインタを読み込み済みの場合は、ストリームポインタを先頭にリセットする必要がありますのでご注意ください。これは 'xmlStream.Position = 0;'または 'xmlStream.Seek(0、SeekOrigin.Begin);'を使って行うことができます。監視された式はこれを実行した後に自動的に更新されないので、イミディエイトウィンドウから両方のコマンドを実行することをお勧めします。 –

0

OK、私はコードを変更せずにデバッガを使用することに成功しませんでした。次のスニペットを追加しました。ブレークポイントを置くか、debugviewを使うことができます。

private MemoryStream GetXml() 
{ 
    MemoryStream xmlStream; 
    xmlStream = new MemoryStream(); 
    XmlWriter writer = new XmlTextWriter(xmlStream, Encoding.UTF8); 
    writer.WriteStartDocument(); 
    //etc etc... 
    writer.WriteEndDocument(); 
    writer.Flush(); 
    xmlStream.Position = 0; 

    #if DEBUG 
    string temp; 
    StreamReader st=new StreamReader(xmlStream); 
    temp=st.ReadToEnd(); 
    Debug.WriteLine(temp); 
    #endif 

    return xmlStream; //Goes off to XSLT transform thingy! 
} 

私はまだそれが実行の流れを中断させる場合でも、単に何とかデバッガでxmlstreamオブジェクトを見ることを好むだろうが、その間に、これは私が管理して最高です。

関連する問題