我对xsl:copy-of有一点问题,因为我只想复制节点的内容,而不是节点本身:
在XML中:
<parent>
<node>Hello, I'm a <b>node</b>!!!</node>
</parent>
在XSL中:
<xsl:template match="parent">
<tr>
<td><xsl:copy-of select="node"/></td>
</tr>
</xsl:template>
结果:
<tr>
<td><node>Hello, I'm a <b>node</b>!!!</node></td>
</tr>
预期结果:
<tr>
<td>Hello, I'm a <b>node</b>!!!</td>
</tr>
问题在于,如果我使用xsl:value-of
,我会松开<b></b>
!!!
答案 0 :(得分:6)
您可以使用
<xsl:copy-of select="node/node()" />
看起来有点奇怪,因为元素名称也是node
,但node()
选择器所做的是从相应节点内部选择所有子元素,文本节点,注释节点和处理指令(s )(在这种情况下,当前上下文元素中称为node
的所有子元素。)
node()
不会选择属性,因此如果您开始使用
<parent>
<node attr="foo">Hello, I'm a <b>node</b>!!!</node>
</parent>
然后<td><xsl:copy-of select="node/node()"/></td>
将产生
<td>Hello, I'm a <b>node</b>!!!</td>
如果您说<td><xsl:copy-of select="node/node() | node/@*"/></td>
,那么您就得到了
<td attr="foo">Hello, I'm a <b>node</b>!!!</td>