2009-05-06 23 views
11

'daki hata ayıklayıcısından XML akışlarını denetleme XSLT stil sayfasını düzenlemeliyim, ancak kör girdim, çünkü XML girdisi yalnızca bir grup akışta geçici olarak var oluyor. Kodda hata ayıklayabilirim, ancak akan içeriğin içeriğine nasıl bakabileceğimi anlayamıyorum (ve düzenlerken XSLT'yi elle çalıştırıyorum).Visual Studio 2003

Kod, büyük eski bir eski sistemin parçası, kesinlikle gerekli ise bir hata ayıklama ortamında değiştirebilir, ancak bir grup MSMQ'lere bağlı bir windows hizmetinde çalışır. Bu nedenle çeşitli nedenlerden ötürü, önce kodu değiştirmek zorunda kalmadan XML'yi görmek için hata ayıklayıcısını kullanabilmeyi tercih ederim.

Kod çok basitleştirilmiş böyle bir şeydir: (C# - ama VS 2003'te Net 1.1 hatırlıyorum) Bu daha sonra bir çeşit beslenen bir dere gibi XML alır fonksiyonudur

XSLT dönüşüm nesnesinin. Saat pencereleri ve hemen pencerede yazar ve xmlStream nesnelerine bakmayı denedim, ancak gerçek XML'i nasıl görebileceğimi tam olarak anlayamıyorum.

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! 
} 

Tüm yardımlar çok takdir edilir.

cevap

14

Sadece saatinizin penceresine bu ifadeyi ekleyebilirsiniz:

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

İzle ifadeler basit değişken değerler olması gerekmez. Karmaşık ifadeler olabilirler, ancak yan etkileri olacaktır. Belirttiğiniz gibi, akış içeriği tamamen okunacağı için bu, yürütmeyi kesintiye uğratır. Yürütmeyi yeniden başlatmanız gerekirse, akışı başka bir ifadeyle kesintiden sonra yeniden oluşturabilirsiniz.

Bu durum, akışları kodlarla ayıklarken sıkça ortaya çıkar, dolayısıyla bunları basit, kendi kendine yeten görevler için önlerim. Ne yazık ki, büyük sistemler için, kod akış yönelimli olmanız gerekip gerekmediğini önceden bilmek her zaman kolay değildir, çünkü nasıl kullanılacağına büyük ölçüde bağlıdır. Bununla birlikte, çoğu durumda, akışların kullanımını erken bir optimizasyon olarak kabul ediyorum.

+2

Bu yanıtı Google’dan (benim de yaptığım gibi) gören herkes için, Aktarım işaretçisini daha önce okunduğunda başa sıfırlamanız gerekebileceğini de unutmayın. Bu, xmlStream.Position = 0; 'veya' xmlStream.Seek (0, SeekOrigin.Begin); 'kullanılarak yapılabilir. İzlenen ifade, bunu yaptıktan sonra otomatik olarak güncellenmediğinden, Komut Penceresinden her iki komutu da çalıştırmanızı öneririm. –

0

Tamam, kodu değiştirmeden hata ayıklayıcıyı kullanmayı başaramadım. Aşağıdaki snippet'i ekledim, bu da bana bir breakpoint koyup debugview kullanmamı sağlar.

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! 
} 

Hala sadece o yürütme akışını bozan, ama bu arada bu ben başardınız iyi olsa bile, nasılsa ayıklayıcısında xmlstream nesneye bakmayı tercih ederim. MemoryStreambaytlık hazır sonra