如何在XSLT中找到以下场景

时间:2014-07-02 10:48:18

标签: xml xslt

我有这样的内容:

<sect1>
    <title>Leiblichkeit und Verk&#x00F6;rperung</title>
    <sect2>
        <title>Leiblichkeit und Verk&#x00F6;rperung</title>
        <para>
        .......
        </para>
    </sect2>
    <sect2>
        <title>Leiblichkeit und Verk&#x00F6;rperung</title>
        <para>
        .......
        </para>
    </sect2>
</sect1>

我希望匹配并应用sect2 title的属性,如果它继续sect1为“below_2_head”

我试过了:

<xsl:template match="title">
    <xsl:copy>
        <xsl:if test="parent::sect1"><xsl:attribute name="aid:pstyle">1_head</xsl:attribute></xsl:if>
        <xsl:if test="parent::sect2"><xsl:attribute name="aid:pstyle"><xsl:if test="parent::sect2/preceding-sibling::title">below_</xsl:if>2_head</xsl:attribute></xsl:if>
            <xsl:apply-templates select="*|@*|comment()|processing-instruction()|text()"/>
    </xsl:copy>
</xsl:template>

我希望输出为:

<sect1>
    <title aid:pstyle="1_head">Leiblichkeit und Verk&#x00F6;rperung</title>
    <sect2>
        <title aid:pstyle="below_2_head">Leiblichkeit und Verk&#x00F6;rperung</title>
        <para>
        .......
        </para>
    </sect2>
    <sect2>
        <title aid:pstyle="2_head">Leiblichkeit und Verk&#x00F6;rperung</title>
        <para>
        .......
        </para>
    </sect2>
</sect1>

1 个答案:

答案 0 :(得分:2)

我怀疑问题在这里:

<xsl:if test="parent::sect2/preceding-sibling::title">

对于示例文档中sect2元素的,情况都是如此,因为它们都有某些之前的兄弟元素{{1} }。您实际需要检查的只是立即前面的兄弟元素,以查看该元素是否是标题:

title