2

我有一个XslCompiledTransform对象,我想要一个XmlReader对象中的输出,因为我需要通过第二个样式表传递它。我有点困惑——我可以成功地转换一些 XML 并使用 aStreamReader或 an读取它XmlDocument,但是当我尝试 an 时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
4

1 回答 1

3

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

如果添加该行:

reader.Read();

...在ReadOuterXml()通话之前,它将按您的预期工作。

PS您通常应该测试该Read()方法的结果,以确保读者确实有东西要阅读。

于 2010-06-03T14:09:49.427 回答