为什么上下文节点输出两次?

时间:2013-05-30 19:42:13

标签: xml xslt

要消除内部para元素,但在itemizedlist中的后续para元素之间放置一个br元素,给定xml如下:

    <listitem>
        <para>The application of power invokes the POR state machine(PORSM). During
        this time, the following registers are initialized:</para>
        .
        .
        .
        <para>In addition, the JTAG interface is disabled and the SSBD is
        open.</para>
     </listitem>

我写了一个如下模板:

 <xsl:template match="listitem/para">
 <xsl:value-of select="."/>
<xsl:if test="count(./following-sibling::para) > 0">
<xsl:element name="br"/> 
</xsl:if>
<xsl:apply-templates/>
 </xsl:template>

我得到了br,但是重复了最初的para元素:

  The application of power invokes the POR state machine
        (PORSM). During this time, the following registers are
        initialized:
    <br/>The application of power invokes the POR state machine
        (PORSM). During this time, the following registers are
        initialized:

我知道这是一个新手问题,但有人可以解释为什么我重复了当前的文本节点吗?

感谢,

拉​​斯

1 个答案:

答案 0 :(得分:3)

第一份副本来自

<xsl:value-of select="."/>

中的第二个
<xsl:apply-templates/>

将模板应用于para元素的所有子节点。子节点包括文本节点和元素节点,如果您没有指定显式模板来匹配text(),则文本节点的默认模板会将文本输出到结果树。