У меня есть этот кусок кода, модифицированного из DITA-OT исходного распределения:Преобразование XSL: Наносить-шаблоны в строковое значение для использования в качестве, если параметр
<xsl:template match="*[contains(@class, ' topic/topic ')]" mode="in-this-section-chapter-list">
<fo:block margin-left="6em">
<fo:block>
<xsl:call-template name="insertVariable">
<xsl:with-param name="theVariableID" select="'Chapter with number'"/>
<xsl:with-param name="theParameters">
<number>
<fo:inline>
<xsl:apply-templates select="key('map-id', @id)[1]"
mode="topicTitleNumber"/>
</fo:inline>
</number>
</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:block>
</xsl:template>
Я пытаюсь выполнить только/печатать эту мини-TOC, когда это Часть, которая имеет главы, как дочерние узлы (смотри ниже), но не тогда, когда это только Часть без глав, в книге, как это:
<?xml version="1.0" encoding="utf-8"?>
<bookmap>
<part>
<chapter/>
<chapter/>
<chapter/>
</part>
<part/>
<part/>
<part/>
<part/>
<appendix/>
</bookmap>
Так что в этом случае только первая < часть > выполнит/распечатает.
Я думал, что передавая значение от < XSL: Наносить-шаблоны выберите "ключ ('карта-идентификатор', @Id) [1]" = режим = "topicTitleNumber"/> как текст, позволит мне чтобы добавить , если, который в основном будет проверять значение, которое не пустое, тем самым выполняя это. Но это не сработало.
я придумал что-то вроде этого, которое не является действительным:
<xsl:template match="*[contains(@class, ' topic/topic ')]" mode="in-this-section-chapter-list">
<xsl:with-param name="value-number">
<xsl:apply-templates select="key('map-id', @id)[1]"
mode="topicTitleNumber"/>
</xsl:with-param>
<xsl:if test="$value-number!=''">
<fo:block margin-left="6em">
<fo:block>
<xsl:call-template name="insertVariable">
<xsl:with-param name="theVariableID" select="'Chapter with number'"/>
<xsl:with-param name="theParameters">
<number>
<fo:inline>
<xsl:apply-templates select="key('map-id', @id)[1]"
mode="topicTitleNumber"/>
</fo:inline>
</number>
</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:block>
</xsl:if>
</xsl:template>
Чтобы сказать что-то ей, требуется хотя бы объявление ключа для идентификатора карты и используемого шаблона с 'mode =" topicTitleNumber "'. Предполагалось, что этот шаблон генерирует некоторый xml. Чем вы не можете использовать это как текст без расширения xslt. –