【问题标题】:XSLT transformation in memory using C#使用 C# 在内存中进行 XSLT 转换
【发布时间】:2011-11-01 12:16:37
【问题描述】:

大家下午好,

我不知道为什么这被证明如此困难,但我一定有这样的日子!

我正在尝试对内存中的 XmlDocument(我已从 Web 服务检索 XML 并保存到数据库)对象执行 XslCompiledTransform。到目前为止,我有以下代码:

        string xslFile = "C:\\MOJLogViewer\\GetClaimTransformed.xslt";

        XslCompiledTransform processor = new XslCompiledTransform();
        processor.Load(xslFile);

        MemoryStream ms = new MemoryStream();
        processor.Transform(xdoc.CreateNavigator(), null, ms);

        ms.Seek(0, SeekOrigin.Begin);

        StreamReader reader = new StreamReader(ms);

        XmlDocument transformedDoc = new XmlDocument();
        transformedDoc.Load(reader.ReadToEnd());


        string output = reader.ReadToEnd();
        ms.Close();

当我尝试运行此代码时,我得到“路径中的非法字符”异常。该路径不包含任何非法字符,所以我完全被难住了!

希望你能帮忙。

谢谢

【问题讨论】:

  • Windows 操作系统的本地化和 VisualStudio 的英文本地化是否不同?
  • xdoc 的类型是什么?

标签: c# .net xml xslt xmldocument


【解决方案1】:
transformedDoc.Load(reader.ReadToEnd());

Load 从路径读取;你可能想要transformedDoc.LoadXml(...)。但老实说,您可以将整个内容写到StringWriter - 更直接:

string output;
using(var writer = new StringWriter())
{
    processor.Transform(xdoc.CreateNavigator(), null, writer);
    output = writer.ToString();
}

此外,它适用于非 xml 输出(xslt 没有义务输出 xml)。

【讨论】:

  • 非常感谢 - 我的脑袋今天根本不工作!再次感谢
  • 奇数。在Transform 通话中,我得到XslTransformException: White space cannot be stripped from input documents that have already been loaded. Provide the input document as an XmlReader instead. 谁知道它为什么不能去除空格,也不能去除空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
相关资源
最近更新 更多