2015-06-04 160 views
1

我有一些XHTML,我需要删除一些格式标记并使用Saxon XSLT 2.0保留内容。例如Xhtml删除格式标记并保留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

你想要的模板规则是

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

这实际上是默认的规则,如果你不具备这些元素相匹配的模板。