代码之家  ›  专栏  ›  技术社区  ›  Graham Clark

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

  •  1
  • Graham Clark  · 技术社区  · 14 年前

    XslCompiledTransform 对象,我希望输出 XmlReader StreamReader 或者一个 XmlDocument ,但当我尝试

    在下面的例子中, stylesheet 是我的 XslCompiledTransform 对象。前两个 Console.WriteLine 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 回复  |  直到 11 年前
        1
  •  3
  •   Aaronaught    14 年前

    XmlReader.ReadOuterXml 方法读取 . 第一次创建读卡器时,没有当前节点,因此 ReadOuterXml 什么也不回。

    如果添加行:

    reader.Read();
    

    …在 ReadOuterXml() 打电话,然后它就会像你期望的那样工作。

    另外,你通常应该测试测试的结果 Read() 方法来确保读取器确实有要读的内容。