gpt4 book ai didi

c# - .NET XslTransform 之谜 - 转换输出中的元字符集

转载 作者:行者123 更新时间:2023-11-30 15:44:27 27 4
gpt4 key购买 nike

我有以下代码:

        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>.....

如您所见,除其他内容外,还添加了字符集信息。

但真正让我吃惊的是,当我更改代码时,将转换为:

    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>....

如您所见,字符集已更改。我猜这是因为 StringBuilder 和 .NET 默认使用 UTF-16 运行。但是,为什么转换仍然要附加带有字符集的 META 标记?

最佳答案

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

关于c# - .NET XslTransform 之谜 - 转换输出中的元字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com