我已经搜索了论坛,但仍然不清楚这一点。我对这个话题很陌生。
我将HTML输出发送到浏览器电子邮件客户端(Outlook)。 Outlook会覆盖SELECT
id,
CONCAT_ws (',',
IF ( exporter1 = 1, 'exporter1',NULL),
IF ( exporter2 = 1, 'exporter2',NULL),
IF ( exporter2 = 3, 'exporter3',NULL)
)
FROM forms;
标记的特征并引入大间距。
我想设置一个模板匹配,用<p>
或<p>
替换所有<div>
代码。
由于本篇文章中未解决的复杂原因,我无法阻止HTML在其中使用<span>
标记进行呈现。
所以我要说:
<p>
我希望输出为
<p xmlns="http://www.w3.org/1999/xhtml">
<span>Some text</span>
</p>
删除了<span>Some text</span>
代码。
如果我有
<p>
然后我会很满意:
<p xmlns="http://www.w3.org/1999/xhtml">
<b>Some other text</b>
</p>
或
<b>Some other text</b>
只要它摆脱<span>
<b>Some other text</b>
</span>
标签。
还需要识别没有任何属性的<p>
。
我想过像
这样的东西<p>
但这不起作用。 <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的适配器,但是我希望避免这种方法存在相当大的困难。
甚至可以做我正在尝试的事情吗?非常感谢任何帮助。
答案 0 :(得分:1)
您的输入文档,例如:
<p xmlns="http://www.w3.org/1999/xhtml">
<span>Some text</span>
</p>
拥有默认命名空间。这是一件好事,因为有效的XHTML文档必须位于命名空间中。
这意味着默认情况下,此命名空间适用于文档中的所有元素,您必须在XSLT样式表中对此进行说明。在那里重新声明这个命名空间:
<xsl:stylesheet xmlns:xhtml="http://www.w3.org/1999/xhtml">
每当您从输入文档中引用元素时,前缀包含xhtml:
的元素:
<xsl:template match="xhtml:p">
<span>
<xsl:apply-templates select="@*|node()" />
</span>
</xsl:template>
这应该让你开始。您还没有告诉我们输出文档是否也应该在命名空间中。
目前,只修改您已有的两个模板,如
<p>
<span/>
</p>
最终将成为
<span>
<span/>
</span>
这对你来说可以接受吗?如果没有,则必须有一个关于包含p
元素的span
元素的附加规则(模板):
<xsl:template match="xhtml:p[xhtml:span]">
或者
<xsl:template match="xhtml:p[//xhtml:span]">