나는 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
좋습니다. 문제의 XML은 표준 프롤로그, 루트 노드 및 하나의 하위 노드를 포함합니다. 하나의 Read() 후에도 아무 것도 인쇄되지 않습니다. 인쇄하기 전에 Read()를 두 번 호출하면 프롤로그없이 XML이 표시됩니다. 왜 이래? –
@ 그래함 : "프롤로그"가 무슨 뜻인지 잘 모르겠다. 기술적으로이 지시문은 문서의 일부가 아니므로 머리글이므로 인쇄되지 않는 이유를 알 수 있습니다. 루트 요소의 이름을 알고 있다면'Read()'를'ReadToFollowing ("NameOfRootElement")'로 대체하십시오. – Aaronaught