2009-05-06 13 views
11

में डीबगर से एक्सएमएल धाराओं का निरीक्षण कैसे करें मुझे एक्सएसएलटी स्टाइलशीट को संपादित करना होगा, लेकिन मैं अंधे उड़ रहा हूं क्योंकि एक्सएमएल इनपुट केवल धाराओं के समूह में तेजी से मौजूद है। मैं कोड में डीबग कर सकता हूं, लेकिन यह पता नहीं लगा सकता कि धाराओं की सामग्री को पाठ में कैसे प्राप्त किया जा सकता है, जिसे मैं देख सकता हूं (और जब मैं उन्हें संपादित कर रहा हूं तो XSLT मैन्युअल रूप से चलाएं)।विजुअल स्टूडियो 2003

कोड एक बड़ी पुरानी विरासत प्रणाली का हिस्सा है, मैं इसे पूरी तरह से आवश्यक होने पर डीबग पर्यावरण में संशोधित कर सकता हूं, लेकिन यह एमएसएमक्यू के समूह से जुड़ी एक विंडोज सेवा में चलता है। तो विभिन्न कारणों से मैं पहले कोड को बदलने के बिना एक्सएमएल देखने के लिए डीबगर का उपयोग करने में सक्षम हूं।

कोड बहुत सरल, कुछ इस तरह है: (सी # - लेकिन यह .net 1.1 वी.एस. 2003 में है याद)

इस समारोह है कि एक धारा है, जो तब किसी प्रकार में खिलाया जाता है के रूप में एक्सएमएल हो जाता है एक्सएसएलटी ट्रांसफॉर्म ऑब्जेक्ट का। मैंने घड़ी खिड़कियों और तत्काल खिड़की में लेखक और एक्सएमएलस्ट्रीम ऑब्जेक्ट्स को देखने की कोशिश की है, लेकिन वास्तविक एक्सएमएल को देखने के लिए काफी समझ नहीं सकते हैं।

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

ठीक है, मैं कोड को संशोधित किए बिना डीबगर का उपयोग करने में सफल नहीं हुआ हूं। मैंने निम्नलिखित स्निपेट में जोड़ा, जो मुझे या तो ब्रेकपॉइंट डालने या डीबगव्यू का उपयोग करने देता है।

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 वस्तु को देखने के लिए, भले ही वह निष्पादन के प्रवाह को बाधित, लेकिन इस बीच में यह सबसे अच्छा मैं प्रबंधित किया है है पसंद करेंगे।

संबंधित मुद्दे