如何使用XSLT将XML与嵌入式HTML转换为嵌入式XML?

时间:2019-06-23 12:41:17

标签: html xml xslt

我有一个XSLT样式表,可用于将XML转换为HTML进行显示。一些XML嵌入了HTML,对此我有一个XSLT规则:

<xsl:template match='html|div|span|h1|h2|table'>
  <xsl:copy-of select="."/>
</xsl:template>

我的问题是输出有时在HTML表中包含XML,而上面的规则只是给了我HTML内未经转换的原始XML,因此我的浏览器只是忽略了无法识别的XML标签,而仅显示XML的文本内容。我如何才能使其转换内部XML,但按原样传递所有其他HTML?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,其中涉及复制HTML节点,然后使用而不是将模板应用于内容。

我的XML看起来像这样:

<foo>
  <h2>Heading</h2>
  <table>
    <tr>
      <td>
        <bar>xyz</bar>
      </td>
    </tr>
  </table>
</foo>

我在上面的XSLT规则中复制了我希望在XML内部看到的HTML标记内的所有内容,但是复制了“ xyz ”结构,该结构在浏览器中显示为“ xyz”。 / p>

解决方案是使用而不是,将其应用于所有无法识别的节点,并使用以下规则将模板应用于节点内部:

<xsl:template match="node()|@*">
  <xsl:copy>
    <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
</xsl:template>

通过这种方式,可以复制未明确涵盖的HTML节点,但是可以通过应用任何适用的模板来处理其内容。