XSL - 检查第一个listitem是否是一个标签

时间:2017-10-18 09:05:11

标签: xml xslt apache-fop

这是我的.xml文件

    <list type="point">
            <listitem>
                <text>
                    <br/>
                    <br/>
                     .
                     .
                     .
                </text>
        </listitem>
    </list>

这里是我的.xsl文件

<xsl:template match="list/listitem">
    <fo:list-item>
        <fo:list-item-body start-indent="body-start()">
            <fo:block>
                <xsl:choose>
                    <xsl:when
                        test=".//list/listitem[1]/[*node*]">
                        &#160;
                        <xsl:apply-templates />
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:apply-templates />
                    </xsl:otherwise>
                </xsl:choose>
            </fo:block>
        </fo:list-item-body>
    </fo:list-item>
</xsl:template>

在这里我的问题:是否有可能在test=[*node*]检查节点是否中断?因为如果有休息我想添加一个空白,如果不是只是应用其他模板而没有空白。 我已经尝试过检查节点是否为空,但可能还有其他空节点。

结果应该是这样的:

<fo:list-block provisional-label-separation="15px" provisional-distance-between-starts="10px">
            <fo:list-item>
                <fo:list-item-body start-indent="body-start()">
                    <fo:block>
                        <fo:block space-before="6pt" space-after="3pt">
                            &#160; 
                            <fo:block>\r\n</fo:block>
                            <fo:block>\r\n</fo:block>
                        </fo:block>
                    </fo:block>
                </fo:list-item-body>
            </fo:list-item>
       </fo:list-block>

亲切的问候

1 个答案:

答案 0 :(得分:1)

你当前的表达是这个......

<xsl:when test=".//list/listitem[1]/[*node*]">

但此时您已定位在listitem上,因此此表达式将查找当前list的后代listitem项,并且不会找到任何内容。

试试这个......

<xsl:when test="not(preceding-sibling::listitem) and */br">

或者,您可以尝试将表达式简化为此....

<xsl:when test="position() = 1 and */br">

但您可能需要确保明确选择listitem元素以确保正确计算position()。例如....

<xsl:template match="list">
    <xsl:apply-templates select="listitem" />
</xsl:template>