如何在XSL转换期间保留HTML内容?

时间:2017-05-22 06:51:38

标签: xml xslt

作为更大的XML的一部分,我有像<testdata>abc</testdata>这样的元素,并且使用XSLT文件中的以下片段将此字符串abc很好地放入表格单元格<td>abc</td>中。 / p>

<td><xsl:value-of select="testdata"/></td>

现在如果测试数据本身就像这样的HTML会怎样?

<testdata>
    <ol>
        <li>abc</li>
        <li>xyz</li>
    </ol>
</testdata>

我可以以某种方式增强上述<xsl:value-of/>以获取<testdata>元素的全部内容吗?我一直在丢失HTML格式,导致<td>abcxyz</td>,但我期望的是:

<td>
    <ol>
        <li>abc</li>
        <li>xyz</li>
    </ol>
</td>

PS:

在其他一些相关问题中,我发现这个xsl模板是一个解决方案。但我不明白如何将这样的身份副本仅应用于<testdata>元素的内容:

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

2 个答案:

答案 0 :(得分:1)

此模板为每个<td>元素输出<testdata>,然后指示XSLT处理器对内容执行必要的操作。

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

如果您提到的身份模板是在您的XSLT代码中定义的,并且没有其他模板与<testdata>的任何内容匹配,那么它将按原样复制。

如果您的XSLT代码是一个包含大量<xsl:for-each>的大型模板(大多数初学者的XSLT代码看起来像这样),那么您将不得不重写它以有效地使用模板匹配(同样{{3} })。

答案 1 :(得分:1)

  

我可以以某种方式增强上述<xsl:value-of/>来完成整个过程   <testdata>元素的内容是什么?

是的,您可以将其更改为:

<xsl:copy-of select="testdata/node()"/>

您通常不会在输出HTML的文档中使用身份转换模板,除非您的输入也是HTML。