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

Zap*_*hod 3 xml xslt

我对xsl:copy-of有一点问题,因为我只想复制节点的内容,而不是节点本身:

在XML中:

<parent>    
    <node>Hello, I'm a <b>node</b>!!!</node>
</parent>
Run Code Online (Sandbox Code Playgroud)

在XSL中:

<xsl:template match="parent">
    <tr>
        <td><xsl:copy-of select="node"/></td>
    </tr>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

结果:

<tr>
    <td><node>Hello, I'm a <b>node</b>!!!</node></td>
</tr>
Run Code Online (Sandbox Code Playgroud)

预期结果:

<tr>
    <td>Hello, I'm a <b>node</b>!!!</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

问题是,如果我使用xsl:value-of,我放松了<b></b>!!!

Ian*_*rts 6

你可以用

<xsl:copy-of select="node/node()" />
Run Code Online (Sandbox Code Playgroud)

它看起来有点奇怪,因为元素名称也是,nodenode()选择器所做的是从适当的节点内部选择所有子元素,文本节点,注释节点和处理指令(在这种情况下node,在当前上下文中调用的所有子元素)元件).

node() 不选择属性,所以如果你开始

<parent>    
    <node attr="foo">Hello, I'm a <b>node</b>!!!</node>
</parent>
Run Code Online (Sandbox Code Playgroud)

然后<td><xsl:copy-of select="node/node()"/></td>会产生

<td>Hello, I'm a <b>node</b>!!!</td>
Run Code Online (Sandbox Code Playgroud)

如果相反你说,<td><xsl:copy-of select="node/node() | node/@*"/></td>那么你会得到

<td attr="foo">Hello, I'm a <b>node</b>!!!</td>
Run Code Online (Sandbox Code Playgroud)