использование xslt таблица стилей для преобразования xhtml пустых строк в пустую строку XSL-FO

Я использую таблицу стилей XSLT (Antennahouse) для преобразования XHTML в файл XSL-FO. Я определил пустую строку в своем файле XHTML как 2 последовательных тега br HTML. Теперь нет никакой собственной поддержки пустой строки в формате XSL-FO. Я хочу работать вокруг этого ограничения путем добавления высоты к fo:block, который таблица стилей вставляет для тега 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 &gt; 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>
6
задан Josh Darnell 13 January 2012 в 13:25
поделиться

1 ответ

Что-то вроде этого.

Сопоставлять только те
, за которыми непосредственно следует элемент ( following-sibling :: * [1] ), который сам является
( [self :: html: br] ):

<xsl:template match="html:br[following-sibling::*[1][self::html:br]]">
  <fo:block space-after="1em" />
</xsl:template>

и выбросьте те
, которым непосредственно предшествует
, чтобы избежать удвоения пробела после. Сопоставляя их с пустым шаблоном, они эффективно удаляются:

<xsl:template match="html:br[preceding-sibling::*[1][self::html:br]]" />
4
ответ дан 17 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: