2010-06-03 8 views
1

나는 XslCompiledTransform 개체를 가지고 있으며, 두 번째 스타일 시트를 통과해야하므로 XmlReader 개체의 결과를 원합니다. 좀 혼란스러워지고 있습니다. XML을 성공적으로 변환하고 StreamReader 또는 XmlDocument을 사용하여 읽을 수 있지만 XmlReader을 시도하면 아무 것도 얻을 수 없습니다.XslCompiledTransform의 출력을 XmlReader로 가져 오는 방법은 무엇입니까?

아래 예제에서 stylesheet은 내 XslCompiledTransform 개체입니다. 처음 두 Console.WriteLine 호출은 올바른 변환 된 XML을 출력하지만 세 번째 호출은 XML을 제공하지 않습니다. 나는 그것이 XmlTextReader이 텍스트를 기대하고있을 것이라고 추측하고 있습니다. 아마도 이것을 StreamReader에서 감쌀 필요가 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

MemoryStream transformed = new MemoryStream(); 
stylesheet.Transform(input, args, transformed); 
transformed.Position = 0; 

StreamReader s = new StreamReader(transformed); 
Console.WriteLine("s = " + s.ReadToEnd()); // writes XML 
transformed.Position = 0; 

XmlDocument doc = new XmlDocument(); 
doc.Load(transformed); 
Console.WriteLine("doc = " + doc.OuterXml); // writes XML 
transformed.Position = 0; 

XmlReader reader = new XmlTextReader(transformed); 
Console.WriteLine("reader = " + reader.ReadOuterXml()); // no XML written 

답변

2

XmlReader.ReadOuterXml 방법은 현재 노드에 대한 XML을 읽습니다. 처음 독자를 만들면 현재 노드가 없으므로 ReadOuterXml은 아무 것도 반환하지 않습니다. 예상대로 ReadOuterXml() 호출하기 전에, 다음이 작동합니다 ...

reader.Read(); 

: 당신이 행을 추가하면

.

P. 판독기에 실제로 읽을 내용이 있는지 확인하려면 일반적으로 Read() 메서드의 결과를 테스트해야합니다.

+0

좋습니다. 문제의 XML은 표준 프롤로그, 루트 노드 및 하나의 하위 노드를 포함합니다. 하나의 Read() 후에도 아무 것도 인쇄되지 않습니다. 인쇄하기 전에 Read()를 두 번 호출하면 프롤로그없이 XML이 표시됩니다. 왜 이래? –

+0

@ 그래함 : "프롤로그"가 무슨 뜻인지 잘 모르겠다. 기술적으로이 지시문은 문서의 일부가 아니므로 머리글이므로 인쇄되지 않는 이유를 알 수 있습니다. 루트 요소의 이름을 알고 있다면'Read()'를'ReadToFollowing ("NameOfRootElement")'로 대체하십시오. – Aaronaught

관련 문제