如何将XSLCompileDTransform的输出输出到XMLReader中?
-
24-10-2019 - |
题
我有一个 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()
确保读者实际上有一些阅读的方法。
不隶属于 StackOverflow