Могу ли я включить переменную в атрибут src блока XSL-FO? - PullRequest
0 голосов
/ 15 октября 2019

У нас есть 60 с лишним изображений, которые мы хотим включить, и мы хотим вставить их в документ, используя имя переменной в атрибуте src. Вот код, который в настоящее время не работает:

Без XSL: -

<var name="Request.Data.Communication.AddressStructured.Sender.OrgId" type="string" />

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions" xmlns:svg="http://www.w3.org/2000/svg" xmlns:th="http://www.thunderhead.com/XSL/Extensions" font-family="Frutiger 45 Light">
  <fo:external-graphic content-height="30mm" content-width="100mm" src="cms:///Resources/Images/Request.Data.Communication.AddressStructured.Sender.OrgId.jpg" />

</fo:block>

С XSL: -

<xsl:block xmlns:xsl="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions" xmlns:svg="http://www.w3.org/2000/svg" 
<xsl:var name="Request.Data.Communication.AddressStructured.Sender.OrgId" select="Request.Data.Communication.AddressStructured.Sender.OrgId"/>

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Transform" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions" xmlns:svg="http://www.w3.org/2000/svg" <fo:external-graphic content-height="30mm" content-width="100mm" src="cms:///Resources/Images/${Request.Data.Communication.AddressStructured.Sender.OrgId}.jpg" />

</fo:block>
</xsl:block>

1 Ответ

1 голос
/ 15 октября 2019

Возможно, вы захотите {$Request.Data.Communication.AddressStructured.Sender.OrgId}, а не ${Request.Data.Communication.AddressStructured.Sender.OrgId}, в противном случае читайте дальше ...


Переход от исходного XML к выводу PDF является двухэтапным процессом (если, конечно,Вы создаете документы непосредственно в словаре XSL-FO). Шаги:

  1. Преобразование XSLT преобразует ваш XML в XML в словаре XSL-FO, который XSL Formatter понимает
  2. Форматер XSL форматирует XSL-FO для создания страниц ивыводит эти страницы в формате PDF, SVG и т. д.

Этот рисунок из рекомендации XSL 1.1 (https://www.w3.org/TR/xsl11/#d0e147) пытается проиллюстрировать процесс:

XSL involves transformation followed by formatting

Этап XSLT имеет переменные, а этап XSL-FO - нет. (Вы можете написать выражения для значения (большинства) свойств XSL-FO, но язык выражений (см. * 1023)*https://www.w3.org/TR/xsl11/#d0e5032) не распространяется на наличие переменных.)

Итак, в вашей таблице стилей XSLT у вас будет что-то вроде:

{$Request.Data.Communication.AddressStructured.Sender.OrgId}.jpg

где:

  • $Request.Data.Communication.AddressStructured.Sender.OrgId - это ссылка на переменную (или параметр). У нас недостаточно информации, чтобы знать, как определить переменную.
  • {...} - это шаблон значения атрибута (AVT), которыйиспользуется, когда вы хотите оценить выражение для генерации некоторых или всех атрибутовзначение te.

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

...