gpt4 book ai didi

html - 使用 Perl XML::XSLT 生成 OUTLOOK 有问题的 HTML

转载 作者:行者123 更新时间:2023-11-28 02:58:49 25 4
gpt4 key购买 nike

我正在使用:

my $xslt = XML::XSLT->new( $xslt_file, warnings => 1 );
$xslt->transform( $xml_file );
$$html = $xslt->toString;

如果在浏览器中查看,结果很好——完全没有问题。查看源代码显示 HTML 基本上是一长行,虽然我看到一些看起来像是换行符的地方(比如在 head 标签之后)。但是很少。

如果我将此 HTML 邮寄到 outlook,我会在整个 HTML 文档中遇到伪随机问题。就像在一个地方颜色是错误的,在另一个地方是错误的字体,在另一个地方是不同的问题。

我深入研究了 outlook 源代码,发现已经添加了换行符,可能是 outlook 在某个时间间隔内添加的。看起来有些论坛说每 76 个字符。这在某些情况下具有破坏性,尤其是当它发生变化时:

style="color:#002212;"

style="color:#00221\n2;"

为了修复它,我首先尝试添加

<xsl:text>\n</xsl:text>

...没有区别。我在 $xslt->toString 上查找了选项,看看我是否可以强制它遵循我的样式表中的 \n - 不行。

我终于回到我的 Perl 并添加了,作为绝望的措施:

$$html =~ s|<|\n<|g;

然后 Outlook 邮件就没问题了——所有问题都解决了。我不喜欢这种拼凑,因为我不能确定用户是否会在他的文本中输入“<”(尽管我猜它会被转换成它的助记符)。我不喜欢无法控制样式表中的换行符。

无论如何,这不可能是一个新问题(尽管我一天有 1/2 的时间在寻找比我的更好的答案)。我希望有一个选项

$$html = $xslt->toString(preserveLineBreaks=>1);

但我没有看到类似的东西。有一个 xsl 选项可以保留空格,但这是我已经在使用的默认选项。那里没有快乐。

最佳答案

如果通过 HTML::Tidy 传递生成的 HTML,情况可能会有所改善.

现在,XML::XSLT 生成输出的方式是:

sub _my_print_text
{
my ( $self, $FILE ) = @_;

if ( UNIVERSAL::isa( $self, "XML::DOM::CDATASection" ) )
{
$FILE->print( $self->getData() );
}
else
{
$FILE->print( XML::DOM::encodeText( $self->getData(), "<&" ) );
}
}

sub toString
{
my $self = $_[0];

local $^W;
local *XML::DOM::Text::print = \&_my_print_text;

my $string = $self->result_document()->toString();

return $string;
}

您可以编写您自己的 _my_print_text 版本,而不是调用 $xslt->toString,您可以使用 $xslt->result_document() ->toString() 在设置 XML::DOM::Text::print 指向你的生成器之后。

关于html - 使用 Perl XML::XSLT 生成 OUTLOOK 有问题的 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35564584/

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