Есть ли способ генерировать PDF в порядке, основанном на коде XML при использовании xsl: apply-template и xsl: call-template? - PullRequest
0 голосов
/ 01 апреля 2019

В настоящее время я создаю многостраничный PDF-документ на Java с использованием XML-кода и XSLT.

XML генерируется в том же порядке ввода (что я и хочу).

Однако при создании PDF я сталкиваюсь с проблемой организации.

Из-за нескольких таблиц стилей, вызываемых с использованием call-template и apply-template, он генерирует PDF в порядке моих категорий apply-template.

Чтобы объяснить это лучше, приведем упрощенный пример:

Input:            
cheese
milk
bread
bagels
rice
eggs

С учетом этого ввода я генерирую XML, соответствующий порядку.

<food>
      <dairy>
          <cheese>
                   <.....></>   <---------cheese information
                   <.....></>    <---------etc.
          </cheese>
     </dairy>



      <grains>
          <bread>
                   <.....></>    <---------bread information
                   <.....></>    <---------etc.
          </bread>
     </grains>
 </food>

Тогда XML-кодиспользуется таблицей стилей для создания PDF следующим образом

<xsl:apply-templates select="/food/dairy"/>
<xsl:apply-templates select="/food/grains"/>

<xsl:template match="/food/dairy">
      <xsl:call-template name="dairy"></xsl:call-template>
</xsl:template>
<xsl:template match="/food/grains">
      <xsl:call-template name="grains"></xsl:call-template>
</xsl:template>

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

Есть ли способ поддерживать порядок XML при вызове и применении шаблонов?

Мне удалось найти только этот соответствующий пост: Применить шаблон XSLT, соответствующий порядку вXML-источник

Хотя это не совсем соответствует моей проблеме.

1 Ответ

0 голосов
/ 01 апреля 2019

Я нахожу ваш вопрос довольно запутанным.В вашем примере шаблоны, соответствующие dairy, применяются перед шаблонами, соответствующими grains.Чтобы предотвратить это и сохранить порядок документов, вы должны заменить:

<xsl:apply-templates select="/food/dairy"/>
<xsl:apply-templates select="/food/grains"/>

на:

<xsl:apply-templates select="/food/dairy | /food/grains"/>

Конечно, это совершенно фиктивный пример - хотя бы потому, чтоXML-документ не может иметь двух корневых элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...