使用XSL文件在CDATA块中解析HTML

时间:2019-01-31 23:37:12

标签: html xml xslt

我想为std::atomic标签解析CDATA块内的HTML,并在单独的表格行中输出每个HTML。但是我还不太清楚,想知道是否有人能够帮助我?

我一直试图解析HTML,但是无法弄清楚如何解析HTML,而不能仅仅将其视为字符数据。我很确定我无法使用XSL 1.0做到这一点,如果需要的话我可以使用2.0。

XML

<p>

XSL

<XML_FILE>
  <NOTE>
    <TEXT TITLE="TEST">
      <![CDATA[<p>first p tag and <strong>bold</strong></p><p>second p tag and  <u>underline</u></p>]]>
    </TEXT>
  </NOTE>
</XML_FILE>

输出

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="NOTE">
    <div class="tableWrapper">
      <table class="body">
        <xsl:apply-templates select="TEXT"/>
      </table>
    </div>
  </xsl:template>

  <xsl:template match="TEXT">
    <xsl:value-of select="." disable-output-escaping="yes"/>
  </xsl:template>

</xsl:stylesheet>

所需的输出

<div class="tableWrapper">
   <table class="body"><p>first p tag and <strong>bold</strong></p><p>second p tag and <u>underline</u></p></table>
</div>

提供所需输出的最终样式表

<div class="tableWrapper">
   <table class="body">
      <tr><td><p>first p tag and <strong>bold</strong></p></td></tr>
      <tr><td><p>second p tag and <u>underline</u></p></td></tr>
   </table>
</div>

1 个答案:

答案 0 :(得分:2)

XSLT 3.0具有功能parse-xml-fragment(),可以解决此问题。

在XSLT的早期版本中没有什么等效的方法,尽管您可能会找到可以帮助您的供应商扩展。大多数处理器都允许您编写自己的外部函数,可以从XSLT代码中调用这些函数,并且可以编写将CDATA内容传递给外部XML解析器以转换为树形结构的函数。