2016-03-30 6 views
1

У меня есть этот bookmap:XSL: если это зависит от дочернего узла

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

Я хотел бы, чтобы разместить внутри шаблонов, XSL: если команды, которые зависят от того, являются ли элементы part/chapter или part.

I.e. Я имел эти внутри шаблона 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> 

Это не работает.

Идея заключается в том, что есть графическое изображение, которое проявляется только в части/главы, а другой на те, которые только часть.

+0

Это, возможно, «не работает», как ваш контекст должен был бы быть узлом документа для теста, чтобы вернуться верно. Вероятно, это поможет увидеть больше вашего XSLT, чтобы дать более полный ответ, особенно шаблон, в котором содержатся заявления. Не могли бы вы также изменить свой вопрос, чтобы показать свой ожидаемый результат? Спасибо. –

+0

Вот раздел, где я хочу поставить diamond.png: (http://josecotes.com/tmp/sample1.txt) Я пытаюсь поставить эту графику перед заголовком каждой темы, но только для темы, которые находятся внутри * части *. Те, что находятся внутри * главы *, не будут добавлены в эту графику. –

ответ

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> 
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

Вы должны прочитать:

Update

Чтобы разместить изображение, вы должны использовать 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, установить пользовательское изображение обложки, а затем сравнить ваш код с кодом сгенерированного плагина.

+0

Большое спасибо. К сожалению, это не сработало, как ожидалось. Вот ссылка раздела http://josecotes.com/tmp/sample1.txt. Прямо сейчас я добавил их, но все еще не работает: '     ' –

+0

Я добавил пример использования шаблона placeImage.Не могли бы вы объяснить, что не работает? –

+0

Я тестировал это далее ... в вашей первой части кода выше, все они верны. Вызывается первый '' в ''. Я удалил этот, а затем второй, и так далее. –

 Смежные вопросы

  • Нет связанных вопросов^_^