xsl:只复制没有节点的内容

时间:2012-11-13 14:15:46

标签: xml xslt

我对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> !!!

1 个答案:

答案 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>