作为更大的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>
答案 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。