使用xsl方法for-each的问题

joe*_*joe 3 xml xslt

使用XSL我试图改变这个XML:

<book><title>This is a <b>great</b> book</title></book>
Run Code Online (Sandbox Code Playgroud)

进入这个XML:

<book>This is a <bold>great</bold> book</book>
Run Code Online (Sandbox Code Playgroud)

使用这个xsl:

<xsl:for-each select="book/title/*">
<xsl:choose>
    <xsl:when test="name() = 'b'">
        <bold>
            <xsl:value-of select="text()"/>
        </bold>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="text()"/>
    </xsl:otherwise>
</xsl:choose>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

但我的输出看起来像这样:

<book><bold>great</bold></bold>
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么根文本<title>会丢失?我相信我的for-each select语句可能需要修改,但我无法弄清楚应该是什么.

请记住,<xsl:template match>由于样式表的复杂性,我无法使用.

谢谢!

Pav*_*aev 7

这个XPath表达式:

book/title/*
Run Code Online (Sandbox Code Playgroud)

意思是"所有子元素book/title".在您的情况下,book/title有3个子节点:

  • 文字节点: This is a
  • 元素节点: <b>...</b>
  • 文字节点: book

如您所见,其中只有一个是元素,并被选中.如果要获取所有子节点(文本和元素),请使用以下命令:

book/title/node()
Run Code Online (Sandbox Code Playgroud)

如果要单独获取文本节点,请使用以下命令:

book/title/text()
Run Code Online (Sandbox Code Playgroud)