使用 C# 在内存中进行 XSLT 转换

发布于 2024-12-12 18:52:56 字数 807 浏览 2 评论 0原文

大家下午好,

我不知道为什么这会如此困难,但我一定会度过这样的日子!

我正在尝试对内存中的 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();

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

我希望你能帮忙。

谢谢

Good afternoon all,

I dont know why this is proving so difficult but I must be having one of those days!

I am trying to perform and XslCompiledTransform on an in memory XmlDocument (I have retrieved the XML from a webservice and saved to a database) object. I have the following code so far:

        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();

When I try to run this code I get the "illegal characters in path" exception. The path does not contain any of the illegal characters so I am absolutely stumped!

I hope you can help.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦里的微风 2024-12-19 18:52:56
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)。

transformedDoc.Load(reader.ReadToEnd());

Load reads from a path; you probably want transformedDoc.LoadXml(...). But in all honesty, you could just write the whole thing to a StringWriter - more direct:

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

Plus it will work for non-xml outputs (xslt is not obliged to output xml).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文