использование таблицы стилей xslt для преобразования пустых строк xhtml в пустую строку XSL-FO
Я использую таблицу стилей XSLT (по Antennahouse) для преобразования XHTML в файл XSL-FO. Я определил пустую строку в моем файле XHTML как 2 последовательных тега HTML BR. Теперь нет собственной поддержки пустой строки в формате XSL-FO. Я хочу обойти это ограничение, добавив высоту в блок fo:, который вставляет таблица стилей для тега BR. Однако я новичок в языке XSLT, и у меня возникли некоторые проблемы с этим.
Я могу понять, как вставить эту высоту каждый тег BR, с которым я сталкиваюсь, но я хочу, чтобы пустая строка вставлялась только тогда, когда есть 2 тега BR друг за другом (в противном случае пустая строка будет вставлена после каждого текста, за которым следует тег BR.)
Я дошел до создания выражения"нонсенс"(11 больше 10), которое определит, когда вставлять обычный FO:block или FO:block с пробелом после= "1em". Очевидно, что это выражение не имеет смысла, то, что он должен проверить, является ли этот элемент BR вторым в строке. Если любой может помочь мне здесь или указать мне в правильном направлении, это было бы очень признательно. Это то, что у меня есть сейчас:
<xsl:template match="html:br">
<xsl:choose>
<xsl:when test="11 > 10">
<fo:block space-after="1em">
<xsl:call-template name="process-common-attributes"/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block>
<xsl:call-template name="process-common-attributes"/>
</fo:block>
</xsl:otherwise>
</xsl:choose>
для справки, это кусок XHTML, где я хочу, чтобы двойные теги BR были преобразованы в пустую строку, но одиночные теги BR должны быть просто обычным разрывом строки.
<div style="color: #000000; font-family: arial; font-size: 10pt; font-style: normal; font-weight: normal;">
<span>description</span>
<br/>
<span>using</span>
<br/>
<span>multiple</span>
<br/>
<span>lines</span>
<br/>
<br/>
<span>with</span>
<br/>
<br/>
<span>blank</span>
<br/>
<br/>
<span>lines</span>
<br/>
</div>
2 ответов
что-то в этом роде.
матч только те <br>
s, за которыми непосредственно следует элемент (following-sibling::*[1]
), что само по себе является <br>
([self::html:br]
):
<xsl:template match="html:br[following-sibling::*[1][self::html:br]]">
<fo:block space-after="1em" />
</xsl:template>
и выбросить эти <br>
s, которым непосредственно предшествует a <br>
, чтобы избежать удвоения пространства-после. Сопоставляя их с пустым шаблоном, они эффективно удаляются:
<xsl:template match="html:br[preceding-sibling::*[1][self::html:br]]" />
Я играл с той же идеей множественных разрывов строк.
<xsl:template match="html:br">
<fo:block linefeed-treatment="preserve">
<xsl:text> </xsl:text>
</fo:block>
</xsl:template>