简单的XSLT转换当XML元素具有文本节点和子节点

时间:2017-04-18 04:08:42

标签: xslt-2.0

我是xslt的新手,我正在尝试转换以下xml:

<li>Hi there <person>David</person> , how is it going? </li>

我想将此转换为另一个xml,如:

<response>Hi there PERSON_NAME , how is it going? </response>

到目前为止我所拥有的是:

<xsl:template match="li">
     <response><xsl:value-of select="text()"/>
     <xsl:choose>
           <xsl:when test="person">
                <xsl:text> PERSON_NAME </xsl:text>
           </xsl:when>
     </xsl:choose>
     </response> 
</xsl:template>

这是我得到的输出:

<response>Hi there , how is it going? PERSON_NAME</response>

不完全是我想要的。我是xslt的新手并且读了一本书。我没有找到任何一个例子,其中xml元素的文本值之间有一个子节点。不确定xslt是否可以处理这个问题,或者我错过了一些基本的东西。任何帮助将不胜感激。我正在使用xslt 2.0

1 个答案:

答案 0 :(得分:0)

您可以简单地定义两个模板来处理您的情况。

<xsl:template match="li">
    <response>
        <xsl:apply-templates/>
    </response>
</xsl:template>

<xsl:template match="person">
    <xsl:text>PERSON_NAME</xsl:text>
</xsl:template>