我有一个 XslCompiledTransform 对象,我想要输出 XmlReader 对象,因为我需要通过第二个样式表。我有点困惑 - 我可以成功地转换一些XML并使用任何一个 StreamReader 或一个 XmlDocument, ,但是当我尝试 XmlReader, ,我什么都没有。

在下面的示例中, stylesheet 是我的 XslCompiledTransform 目的。前两个 Console.WriteLine 呼叫输出正确的转换后的XML,但第三个呼叫没有XML。我猜这可能是 XmlTextReader 是否期待文本,所以也许我需要将其包裹在流程阅读器中。我究竟做错了什么?

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
有帮助吗?

解决方案

XmlReader.ReadOuterXml 方法读取XML的 当前节点. 。当您首次创建读者时,没有当前节点,所以 ReadOuterXml 什么都不会返回。

如果添加行:

reader.Read();

...之前 ReadOuterXml() 致电,然后它会按照您的期望工作。

PS您通常应该测试 Read() 确保读者实际上有一些阅读的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top