Text <;xsl:output-method=";“文本”/&燃气轮机;产生一些不需要的输出

Text <;xsl:output-method=";“文本”/&燃气轮机;产生一些不需要的输出,text,methods,output,xslt-1.0,Text,Methods,Output,Xslt 1.0,我向客户提供了大量用于生成电子邮件正文的.xslt(XSLT1.0)文件。它们的设计和供应都带有,一切正常 客户被告知,如果他们的邮件系统无法处理HTML,他们只需将.xslt文件更改为。一切都很好。现在我已经更改了模板,使其包含CSS样式声明,如: <style> body { font-family: Verdana, Arial, Sans-Serif; font-size: 10pt; } </style> 正文{字体系列:Verdana,Arial,无衬线;

我向客户提供了大量用于生成电子邮件正文的
.xslt
(XSLT1.0)文件。它们的设计和供应都带有
,一切正常

客户被告知,如果他们的邮件系统无法处理HTML,他们只需将
.xslt
文件更改为
。一切都很好。现在我已经更改了模板,使其包含CSS
样式
声明,如:

<style>
body { font-family: Verdana, Arial, Sans-Serif; font-size: 10pt; }
</style>

正文{字体系列:Verdana,Arial,无衬线;字体大小:10pt;}
虽然
文本
输出方法正确地知道省略了
标记行,但输出文本的结尾是
正文{font-family:Verdana,Arial,Sans-Serif;font-size:10pt;}
,这在文本邮件内容中显然是不需要的

  • method=“text”
    时,我能对该片段做些什么来防止它被输出吗?(我对此表示怀疑。)


  • 或者,如我在评论中所说,有没有任何方法可以使用
    ,我认为这不是一个好方法-但是您可以使用以下表达式获得输出方法的值:

    document('')/*/xsl:output/@method
    

    我想你是在向后看。输出方法不是样式表的输入;它是代码的一部分,用于从(真实)输入中获得所需的输出。它也不能被参数化,我真的不明白你上面说的。我知道输出方法不是一个参数。网站必须更改样式表(这是他们正在运行的应用程序,他们有样式表)才能将“html”编辑为“文本”,他们对此很满意。我想做的是在纯文本输出中省略内部文本。我是说,让用户修改输出方法并期望其他一切继续工作不是一种健康的方法。如果您想给它们某种程度的控制,那么请将样式表参数化。xml的输出方法(省略xml声明)应该允许您涵盖所有场景。我曾认为,通过改变输出方法,HTML输出可以生成合理的文本等价物(到目前为止,它对我来说还可以!),这是一个很好的方法,它基本上会删除所有HTML标记。我很高兴你说你期望太高了!我还是不明白你在说什么。用户只想将输出从HTML更改为文本,您所说的是什么参数化,XML到XML,这会影响这一点?您是说从当前XSLT生成新的XSLT吗?我是说开发人员和用户之间的关系。如果您想让用户选择,那么向样式表添加一个(全局)参数,例如
    HTML
    。然后教他们如何修改它,可以是手动修改,也可以是在运行时发送一个实际的参数,其他什么都不做。当我尝试
    处理
    东西时,.NET运行时告诉我:
    禁止执行“document()”函数。使用XsltSettings.enabledDocumentFunction属性启用它。
    在我的.NET应用程序中启用此功能是否“安全”?您必须询问了解.NET的人:-)虽然我承认这是我所寻找的正确原则,但不幸的是,它在我的情况下不起作用。出现
    的文件(我希望进行此测试)实际上是一个单独的
    .xslt
    文件,它是
    的一部分,每个邮件消息本身都有
    的.xslt
    文件。似乎
    文档(“”)
    引用的是包含的文档,而不是包含的文档,因此它看不到输出方法。在我将此答案标记为“解决方案”之前,我认为没有任何理由支持
    document()
    ?可能有,但我恐怕在您的解释中迷失了方向。也许你应该发布一个新问题?