Есть ли что-то “как” CSS, встроенный в XSL-FO?

Я думаю, что вопрос в том, как написать синтаксический анализатор, а не оценщик. Или, скорее, как создать дерево выражений из строки.

Операторы case, которые возвращают базовый класс, точно не учитываются.

Базовая структура «полиморфного» решения (это еще один способ сказать, мне все равно, с чем вы это строите, я просто хочу расширить его с помощью переписывания наименьшего количества кода) - десериализация объекта иерархия из потока с (динамическим) набором известных типов.

Суть реализации полиморфного решения заключается в том, чтобы иметь способ создания объекта выражения из сопоставителя шаблонов, вероятно, рекурсивного. То есть сопоставить BNF или аналогичный синтаксис с фабрикой объектов.

10
задан Jay Stevens 10 June 2009 в 21:34
поделиться

1 ответ

Нет, вам не обязательно использовать xsl: element, атрибут use-attribute-sets может появиться в буквальных элементах результата, если вы поместите его в пространство имен XSLT, поэтому вы можете использовать что-то вроде :

<fo:something xsl:use-attribute-sets="myAttributeSet">

Если вы хотите иметь что-то близкое к функциональности CSS, вы можете добавить еще одно преобразование XSLT в конце обработки, которое добавляет требуемые атрибуты. Вы можете начать с рекурсивного преобразования идентичности, а затем добавить шаблоны, соответствующие элементам, которые вы хотите изменить, см. Небольшой пример ниже

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:attribute-set name="commonAttributes">
    <xsl:attribute name="common">value</xsl:attribute>
  </xsl:attribute-set>
  <xsl:template match="node() | @*">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="someElement">
    <xsl:copy use-attribute-sets="commonAttributes">
      <xsl:attribute name="someAttribute">someValue</xsl:attribute>
      <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
11
ответ дан 4 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

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