Условное форматирование XSL - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь сделать элементы <sup> надстрочными, когда сталкиваюсь с ними. Я перебираю большой файл, который могу при необходимости включить, в основном <xml><article><body><p><em></em><sup></sup></p></body></article></xml>

Я получаю:

Ошибка синтаксического анализатора XML: тип элемента "fo": inline "должен завершаться соответствующим конечным тегом" </fo:inline> "

при попытке использовать нижеследующий текст для поднятия верхнего индекса:

<xsl:for-each select="*">
    <fo:block>
        <xsl:if test="name() = 'sup'">
            <fo:inline vertical-align='super' baseline-shift='4pt'>
        </xsl:if>
        <xsl:apply-templates select="." mode="xhtml"/>
        <xsl:if test="name() = 'sup'">
            </fo:inline>
        </xsl:if>
    </fo:block>
</xsl:for-each>

Как я могу исправитьтак что vertical-align='super' только для sup элементов;и есть ли лучший подход к этому? Я планирую сделать то же самое для em с позже.

Мой код, который я использую в настоящее время, но выдает все в виде простого текста:

<xsl:for-each select="*">
    <fo:block><xsl:apply-templates select="." mode="xhtml"/></fo:block>
</xsl:for-each>

1 Ответ

1 голос
/ 07 ноября 2019

Если вы хотите преобразовать <sup></sup> в <fo:inline vertical-align='super' baseline-shift='4pt'></fo:inline>, то обычным способом с XSLT является настройка шаблона

<xsl:template match="sup">
  <fo:inline vertical-align='super' baseline-shift='4pt'>
    <xsl:apply-templates/>
  </fo:inline>
</xsl:template>

Я не уверен, хотите ли вы сделать это в целом или дляопределенный режим (в этом случае добавьте mode="mode-name" на xsl:template и mode="#current" на xsl:apply-templates).

...