Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xhtml使用XSLT2.0删除格式标记并保留内容_Html_Xml_Xslt_Xhtml_Xslt 2.0 - Fatal编程技术网

Xhtml使用XSLT2.0删除格式标记并保留内容

Xhtml使用XSLT2.0删除格式标记并保留内容,html,xml,xslt,xhtml,xslt-2.0,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

我有一些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中轻松匹配。在这种情况下,文本周围有中心、斜体、字体、样式和其他元素,或者文本可能位于表格内。枚举所有可能的格式元素顺序是不可行的


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

您需要的模板规则是

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

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