xsl:如果这取决于子节点

时间:2016-03-30 06:42:38

标签: xslt xsl-fo dita oxygenxml dita-ot

我有这本书的地图:

<?xml version="1.0" encoding="utf-8"?>
<bookmap>
<part>
    <chapter/>
    <chapter/>
    <chapter/>
</part>
<part/>
<part/>
<part/>
<part/>
<appendix/>
</bookmap>

我想放置模板,xsl:if命令取决于元素是part/chapter还是part

即。我在模板processTopicTitle中有这些,这是DITA-OT发行版的一部分:

<xsl:if test="bookmap/part/chapter">
    <fo:external-graphic src="thisischapter.png" />
</xsl:if>

<xsl:if test="bookmap/part">
    <fo:external-graphic src="thisispart.png" />
</xsl:if>

这不起作用。

这个想法是有一个图形只显示在部分/章节中,而另一个只显示部分

2 个答案:

答案 0 :(得分:2)

你需要做的是这样的事情:

<xsl:choose>
    <!-- parts -->
    <xsl:when test="$map//*[contains(@class, ' bookmap/part ')]">
        <xsl:call-template name="getVariable">
            <xsl:with-param name="id" select="'First Cover Image Path'"/>
        </xsl:call-template>
    </xsl:when>
    <!-- chapters -->
    <xsl:when test="$map//*[contains(@class, ' bookmap/chapter ')]">
        <xsl:call-template name="getVariable">
            <xsl:with-param name="id" select="'Second Cover Image Path'"/>
        </xsl:call-template>
    </xsl:when>
    <!-- parts without chapters -->
    <xsl:when test="$map//*[contains(@class, ' bookmap/part ')][not(child::*[contains(@class, ' bookmap/chapter ')])">
        <xsl:call-template name="getVariable">
            <xsl:with-param name="id" select="'Third Cover Image Path'"/>
        </xsl:call-template>
    </xsl:when>
</xsl:choose>

您应该在配置文件~/cfg/common/vars/en.xml

中定义图像

你应该阅读:

<强>更新

要放置图片,您应该使用placeImage模板:

<xsl:apply-templates mode="placeImage" select=".">
    <xsl:with-param name="imageAlign" select="@align"/>
    <xsl:with-param name="href"
                    select="
                    if (@scope = 'external' or opentopic-func:isAbsolute(@href)) then
                        @href
                    else
                        concat($input.dir.url, @href)"/>
    <xsl:with-param name="height" select="@height"/>
    <xsl:with-param name="width" select="@width"/>
</xsl:apply-templates>

使用dita-generator生成插件很有帮助,设置自定义封面图片,然后将您的代码与生成的插件的代码进行比较。

答案 1 :(得分:0)

我让它像这样工作:

<xsl:template name="insertDiamond">
    <xsl:variable name="topicref" select="key('map-id', ancestor-or-self::*[contains(@class,' topic/topic ')][1]/@id)"/>
    <xsl:choose>
        <xsl:when test="$topicref//ancestor-or-self::*[contains(@class, ' bookmap/part ')][not(child::*[contains(@class, ' bookmap/chapter ')])]">
            <!--Put actions here for parts without any chapters as childs-->
        </xsl:when>
        <xsl:otherwise>
            <!--Put actions here for the rest.-->
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>