Xhtml删除格式标签并使用XSLT 2.0保留内容

时间:2015-06-04 13:16:41

标签: html xml xslt xhtml xslt-2.0

我有一些XHTML,我需要删除一些格式化标签并使用Saxon XSLT 2.0保留内容。例如

<p><center><i>General</i></center></p>

我想将其转换为

<p>General</p>

我使用标准XSLT身份转换并添加模板来处理我想要消除的标记。

我看过网上(和这里),我得到的答案没有用。如果我添加转换

<xsl:template match="h:i">
  <xsl:copy-of select="*"/>
</xsl:template>  

输出没有变化。我理解为什么它的工作方式如此。将复制包含标记的整个节点。

当我使用

<xsl:template match="h:i">
  <xsl:copy-of select="."/>
</xsl:template> 

文本常规未出现在输出中。我认为这是正确的方法,因为它只复制内容,而不是完整元素。

如何获取节点的内容而不复制元素?

此外,节点的内容可能更复杂,如表格。

<p><center><table>...</table></center></p>

在这种情况下,我只想要

<p><table>...</table></p>

请注意,有一个问题的标题非常相似,但它没有解决这个问题。之所以解决是因为删除的节点可以在XPath中轻松匹配。在这种情况下,文本周围有中心,斜体,字体,样式和其他元素,或者文本可以在表格内。枚举所有可能的格式元素顺序是不可行的。

这应该是一个常见的案例,但我找不到一个有效的例子。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

您想要的模板规则是

<xsl:template match="center|i">
  <xsl:apply-templates/>
</xsl:template>

如果您没有与这些元素匹配的模板,这实际上是默认规则。