Xslt XSL模板匹配替换元素
我已经搜索了论坛,但仍然不清楚这一点。我对这个话题很陌生 我的HTML输出正在发送到浏览器电子邮件客户端(Outlook)。Outlook会覆盖Xslt XSL模板匹配替换元素,xslt,xhtml,template-matching,Xslt,Xhtml,Template Matching,我已经搜索了论坛,但仍然不清楚这一点。我对这个话题很陌生 我的HTML输出正在发送到浏览器电子邮件客户端(Outlook)。Outlook会覆盖标记的特征,并引入大间距 我想设置一个模板匹配,用或替换所有标记 由于复杂的原因,我无法阻止在HTML中使用标记来呈现HTML,这在本文中将不会讨论 让我们说我有: <p xmlns="http://www.w3.org/1999/xhtml"> <span>Some text</span> </p>
标记的特征,并引入大间距
我想设置一个模板匹配,用
或
替换所有
标记
由于复杂的原因,我无法阻止在HTML中使用
标记来呈现HTML,这在本文中将不会讨论
让我们说我有:
<p xmlns="http://www.w3.org/1999/xhtml">
<span>Some text</span>
</p>
一些文本
我希望输出是
<span>Some text</span>
一些文本
移除
标记后
如果我有
<p xmlns="http://www.w3.org/1999/xhtml">
<b>Some other text</b>
</p>
其他一些文本
那么我会很高兴:
<b>Some other text</b>
其他一些文本
或
其他一些文本
只要它去掉了
标记
它还需要识别没有任何属性的
我想到了类似的事情
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="p">
<span>
<xsl:apply-templates select="@*|node()" />
</span>
</xsl:template>
但这是行不通的。
标记仍会出现
可以编写一个适配器,在将HTML发送到smtp服务器并对其进行操作之前拦截HTML,但是这种方法存在相当大的困难,我希望避免这种困难
甚至可以做我正在尝试的事情吗?非常感谢您的帮助。您的输入文档,例如此示例:
<p xmlns="http://www.w3.org/1999/xhtml">
<span>Some text</span>
</p>
这应该让你开始。您还没有告诉我们输出文档是否也应该在名称空间中
目前,仅修改已有的两个模板,结构如下
<p>
<span/>
</p>
或许
<xsl:template match="xhtml:p[//xhtml:span]">
您是否错误地将此问题标记为xsl fo
?XSL-FO不同于XSLT。生成输入XML的系统是基于XSL-FO的。。。但你是对的,这与这个问题无关。移除标签。干杯,谢谢。我正在使用的输入HTML是由其他系统自动生成的,不能更改。不幸的是,这个系统强制添加了我们不想要的段落标记。我很感兴趣的是,当你说p标签将更改为span标签。这正是我认为我的模板匹配会做的。。但它没有这样做。p标签仍然在那里。一定是发生了更多我没看到的事情。我会继续调查。谢谢回答您的问题,是的,我可以使用嵌套的span标记。在这一点上,只要p标记消失了,我就不再关心如何正确地做事情了——它们在某些电子邮件阅读器中引起了头痛,因为Outlook是如何覆盖他们的CSS行为的。@solardb那么,你试过我的建议了吗?在样式表中声明XHTML名称空间?我不是建议您更改输入文档。我有xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/xsl/Transform”,我还有一个html标记,上面有html xmlns=“http://www.w3.org/1999/xhtml”,我将尝试更改它。(前斜杠之间没有空格)@solardb带有http://www.w3.org/1999/XSL/Transform
(带有空格)的样式表将导致错误-为什么有空格?XHTML名称空间也是如此。这些名称空间URI具有含义,不能更改。有关转换的完整示例,请参见。
<xsl:template match="xhtml:p">
<span>
<xsl:apply-templates select="@*|node()" />
</span>
</xsl:template>
<p>
<span/>
</p>
<span>
<span/>
</span>
<xsl:template match="xhtml:p[xhtml:span]">
<xsl:template match="xhtml:p[//xhtml:span]">