如何将XslCompiledTransform的输出转换为XmlReader?

时间:2010-06-03 13:59:44

标签: c# .net xml xslt xslcompiledtransform

我有一个XslCompiledTransform对象,我希望输出在XmlReader对象中,因为我需要通过第二个样式表传递它。我有点困惑 - 我可以成功转换一些XML并使用StreamReaderXmlDocument来读取它,但是当我尝试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

1 个答案:

答案 0 :(得分:2)

XmlReader.ReadOuterXml方法读取当前节点的XML。当您第一次创建阅读器时,没有当前节点,因此ReadOuterXml将不返回任何内容。

如果添加以下行:

reader.Read();

...在ReadOuterXml()来电之前,它会按预期工作。

P.S。您通常应该测试Read()方法的结果,以确保读者实际上有一些东西可以阅读。