繁体   English   中英

.NET XslTransform之谜 - 转换输出中的META字符集

[英].NET XslTransform mystery - META charset in transformation output

我有以下代码:

        using (Stream stream = new MemoryStream())
        {
            xslt.Transform(document, xslArg, stream);
            stream.Seek(0, SeekOrigin.Begin);
            StreamReader reader = new StreamReader(stream);
            var result = reader.ReadToEnd();
            return result;
        }

该转换输出HTML文档。 令我感到困惑的是,即使输入xsl包含:

        <html>
            <head>
                <style>
                    @page Section1
                    {size:612.0pt 792.0pt;
                    margin:42.55pt 42.55pt 42.55pt 70.9pt;
                    mso-header-margin:35.45pt;
                    mso-footer-margin:35.45pt;
                    mso-paper-source:0;}
                    div.Section1
                    {page:Section1;}
            </head>
            <body>
                <div class="Section1">
                .....

输出是:

<html xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <head>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style>.....

如你所见,除了其他东西之外,还增加了charset信息。

但真正让我感到惊讶的是,当我改变代码以使转换为:

    StringBuilder sb = new StringBuilder();
    using (StringWriter writer = new StringWriter(sb))
    {
        xslt.Transform(document, xslArg, writer);
    }
    var result = sb.ToString();
    return result;

生成的输出具有以下形式:

<html xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <head>
    <META http-equiv="Content-Type" content="text/html; charset=utf-16">
    <style>....

如你所见,charset已发生变化。 我想这是因为StringBuilder和.NET默认使用UTF-16进行操作。 但是,为什么转换会将META标签添加到charset呢?

那么你的样式表有<xsl:output method="html"/>或者结果树的根元素有本地名称html并且没有名称空间。 在这两种情况下,XSLT规范要求XSLT处理器在序列化结果树时在头部分中添加元素和内容类型和字符集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM