我有一个XslCompiledTransform
对象,我希望输出在XmlReader
对象中,因为我需要通过第二个样式表传递它。我有点困惑 - 我可以成功转换一些XML并使用StreamReader
或XmlDocument
来读取它,但是当我尝试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
答案 0 :(得分:2)
XmlReader.ReadOuterXml
方法读取当前节点的XML。当您第一次创建阅读器时,没有当前节点,因此ReadOuterXml
将不返回任何内容。
如果添加以下行:
reader.Read();
...在ReadOuterXml()
来电之前,它会按预期工作。
P.S。您通常应该测试Read()
方法的结果,以确保读者实际上有一些东西可以阅读。