2009-05-06 1 views
11

XSLT 스타일 시트를 편집해야하지만 XML 입력이 많은 스트림에만 존재하기 때문에 시각 장애인입니다. 코드로 디버깅 할 수 있지만 스트림의 내용을 볼 수있는 텍스트로 가져 오는 방법을 알아낼 수는 없습니다 (편집하는 동안 수동으로 XSLT를 실행).Visual Studio 2003에서 디버거에서 XML 스트림을 검사하는 방법

이 코드는 아주 오래된 레거시 시스템의 일부로, 절대적으로 필요한 경우 디버그 환경에서 수정할 수 있지만 일련의 MSMQ에 연결된 Windows 서비스에서 실행됩니다. 그래서 여러 가지 이유로 먼저 코드를 변경하지 않고도 디버거를 사용하여 XML을 볼 수 있습니다.

코드가 훨씬 단순화이 같은 것입니다 : (C#을 -하지만 VS 2003 년 .NET 1.1의 기억)이 다음 일종으로 공급되는 스트림으로 XML을 얻는 기능이

XSLT 변환 개체. 조사 식 창과 직접 창에서 작성자와 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

당신은 단순히 시계 창에이 ​​표현을 추가 할 수 있습니다

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

시계 식은 간단한 변수 값이 될 필요가 없습니다. 복잡한 표현이 될 수 있지만 부작용이 있습니다. 앞에서 언급했듯이 스트림 내용이 완전히 읽혀지기 때문에 실행이 중단됩니다. 실행을 다시 시작해야하는 경우 중단 후 스트림을 다른 표현식으로 다시 만들 수 있습니다.

이 상황은 스트림이있는 코드를 디버깅 할 때 자주 발생하므로 간단하고 독립적 인 작업에서는 사용하지 않아야합니다. 유감스럽게도 대형 시스템의 경우 코드 사용 방식에 크게 의존하기 때문에 코드 지향적인지 여부를 미리 알기가 쉽지 않습니다. 그러나 스트림의 사용은 많은 경우에 조숙 한 최적화라고 생각합니다.

+2

Google에서이 답변을 접하는 모든 사용자에게 스트림 포인터를 이미 읽은 경우 스트림 포인터를 처음으로 재설정해야 할 수도 있습니다. 이것은'xmlStream.Position = 0;'또는'xmlStream.Seek (0, SeekOrigin.Begin);'을 사용하여 수행 할 수 있습니다. 감시 된 표현식은 이것을 수행 한 후에 자동으로 업데이트되지 않으므로 직접 실행 창에서 두 명령을 모두 실행하는 것이 좋습니다. –

0

좋아, 코드를 수정하지 않고 디버거를 사용하는 데 성공하지 못했습니다. 다음 코드 단편에 추가하여 중단 점을 넣거나 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 개체를보고 원합니다. MemoryStream을 준비 후