Ошибка теста XSL, по крайней мере, одна содержит вместо одной - PullRequest
0 голосов
/ 23 октября 2018

С несколькими XML-документами, содержащими элементы темы, и только одним файлом, содержащим элемент темы с атрибутом product = "OPTION".

Я хотел бы написать OPTION, если атрибут установлен для темы, и TOTO, еслиатрибута для темы не существует.

Проблема в том, что на самом деле, если хотя бы один файл содержит атрибут product = "OPTION" OPTION записывается на каждой сгенерированной странице PDF.

<xsl:template name="insertBodyEvenHeader">
  <xsl:param as="xs:string" name="flow-name" select="'even-body-header'" />
  <fo:static-content flow-name="{$flow-name}">
    <fo:block xsl:use-attribute-sets="__body__even__header">
      <xsl:choose>
         <xsl:when test="topic/@product='OPTION'">
            <fo:inline xsl:use-attribute-sets="title__option">
               <xsl:text>OPTION</xsl:text>
            </fo:inline>
          </xsl:when>
          <xsl:otherwise>TOTO</xsl:otherwise>
       </xsl:choose>   
    </fo:block>  
  </fo:static-content>
</xsl:template>

Будетбудь так любезен, чтобы помочь мне разобраться с этим тестом?спасибо, с наилучшими пожеланиями

1 Ответ

0 голосов
/ 24 октября 2018

Вполне вероятно, что ваш контекст для этого шаблона выше темы (что имеет смысл, потому что вы тестируете на topic / @ product).Вот почему, если у вас есть 10 элементов темы и один из них имеет @ product = 'OPTION', тогда WHEN имеет значение true.

Если это так, и вы хотите проверить вывод текущей темы, то вы должны использовать retrieve-marker в заголовке, а затем создайте маркеры в шаблоне темы и перетащите эти маркеры в заголовок.

Тогда ваш выбор станет @product (потому что вы находитесь в шаблоне темы), и вы просто отбросите fo:marker, в котором будет ваш выбор, затем используйте fo:retrieve-marker и некоторые retrieve-position в зависимости откак вы хотите, чтобы они были обработаны.Если тема всегда начинает страницу, вы должны использовать first-including-carryover.

...