Как отобразить стили, такие как цвет и размер шрифта, которые присутствуют внутри тега span в xslt, используя xsl-fo? - PullRequest
0 голосов
/ 23 января 2019

Я генерирую PDF-файлы на основе выходных данных редактора форматированного текста, некоторые компоненты, такие как цвет шрифта, размер шрифта для определенного слова или абзаца, выглядят как

 <p>Hello Hi <strong>skansdjnsjc</strong>
 <span style="color:#ce181e"><em>cddsklncjkdsv</em></span>
 <span style="color:#ce181e">sdsadsad</span></p>

И в моем файле xslt я соответствовал шаблону как

  <xsl:template match="span">     
    <xsl:variable name="color">
     <xsl:choose>
       <xsl:when test="@color">
         <xsl:value-of select="@color"/>
       </xsl:when>
       <xsl:otherwise>
         <xsl:text>black</xsl:text>
       </xsl:otherwise>
    </xsl:choose>
 </xsl:variable>
 </xsl:template>

Но требуемые стили не отображаются в файле PDF. Я что-то пропустил? или есть какое-то решение.

Спасибо За помощь заранее !!!

1 Ответ

0 голосов
/ 23 января 2019

В XSLT 2.0 вы можете извлечь цвет из атрибута стиля следующим образом:

<xsl:variable name="extractColor" select="tokenize(tokenize(@style, ';')[normalize-space(substring-before(., ':')) = 'color'], ':')[2]" />

Затем, чтобы установить переменную color (установив ее на black, если цвет не был извлечен),сделать это ....

<xsl:variable name="color" select="($extractColor, 'black')[1]" />

Конечно, если вы расширили для извлечения других значений, вы можете создать функцию.

Попробуйте это XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:my="my">
  <xsl:output method="html" indent="yes" html-version="5"/>

  <xsl:template match="span">
    <span>
        <xsl:variable name="color" select="(my:extract(@style, 'color'), 'black')[1]" />
        <xsl:value-of select="$color" />
    </span>
  </xsl:template>

  <xsl:function name="my:extract">
      <xsl:param name="text" />
      <xsl:param name="name" />
      <xsl:sequence select="tokenize(tokenize($text, ';')[normalize-space(substring-before(., ':')) = $name], ':')[2]" />
  </xsl:function>
</xsl:stylesheet>
...