/ / Como definir uma cor em xslt uma vez para todos os campos - variáveis, xslt, cores

Como definir uma cor no xslt uma vez para todos os campos - variáveis, xslt, cores

Posso definir uma variável ou algo, digamos"vermelho" uma vez e quando eu quero que alguma fonte seja vermelha eu chamo essa variável? Dessa forma, posso editar a cor de todo o texto especificado com facilidade para possibilidades futuras. Eu sou novo no xslt e agradeço qualquer ajuda. Obrigado.

Editar: adicionar algum código com o que eu gostaria.

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<!--Probably declare the variable here-->
<!--Like <variable=outputcolor value="red" -->
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4-portrait"
page-height="29.7cm" page-width="21.0cm" margin="2cm">
<fo:region-body />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="xsl-region-body" font-family="Helvetica"
font-size="6pt">
<fo:block font-size="8pt" text-indent="5pt">
<fo:inline font-weight="bold"><xsl:text>Application Summary</xsl:text></fo:inline>
<!--Here i would like to make red a variable that i could possibly changed -->
<!--like fo:inline color="{outputcolor}"-->
<fo:inline color="red">
<xsl:value-of select="businessInfo/appSum" />
</fo:inline>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>

Respostas:

1 para resposta № 1

Usando um attribute-set é uma opção que vale a pena explorar. Outra opção é fazer o que você começou a fazer:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />

<xsl:template match="/">
<!--Probably declare the variable here-->
<xsl:variable name="outputcolor" select=""red"" />
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4-portrait"
page-height="29.7cm" page-width="21.0cm" margin="2cm">
<fo:region-body />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="xsl-region-body" font-family="Helvetica"
font-size="6pt">
<fo:block font-size="8pt" text-indent="5pt">
<fo:inline font-weight="bold"><xsl:text>Application Summary</xsl:text></fo:inline>
<!--Here i would like to make red a variable that i could possibly changed -->
<fo:inline color="{$outputcolor}">
<xsl:value-of select="businessInfo/appSum" />
</fo:inline>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>

</xsl:stylesheet>

Observe que declarar a variável no nível superiordo modelo limita seu escopo apenas a esse modelo. Você pode declarar variáveis ​​globais (no nível superior da folha de estilo, fora de qualquer modelo) para torná-las disponíveis em qualquer lugar da folha de estilo.


1 para resposta № 2

Você pode definir um conjunto de atributos nomeado como um filho direto de xsl:stylesheet, contendo os atributos que você deseja reutilizar:

<xsl:attribute-set name="colouredText">
<xsl:attribute name="color">red</xsl:attribute>
<!-- you can set other attributes too: font-weight, font-style, ... -->
</xsl:attribute-set>

e use-o ao criar elementos com xsl:copy, xsl:element ou com um elemento de resultado literal:

<xsl:copy use-attribute-sets="colouredText">
...
</xsl:copy>

<xsl:element name="fo:inline" use-attribute-sets="colouredText">
...
</xsl:element>

<fo:inline xsl:use-attribute-sets="colouredText">
...
</fo:inline>

Se os requisitos de saída mudarem ("Além de serem vermelhas, as informações importantes também devem estar em negrito" / "Esqueça a cor, só coloquei itálico" / "Tente usar Comic Sans") você só precisa ajustar as definições de atributo dentro do conjunto de atributos, sem ter que modificar os modelos onde esses "estilos" são aplicados.

O valor do xsl:use-attribute-sets atributo é separado por espaços em branco Lista de nomes de conjuntos de atributos:

<xsl:attribute-set name="spacedText">
<xsl:attribute name="space-before">12pt</xsl:attribute>
<xsl:attribute name="space-after">12pt</xsl:attribute>
</xsl:attribute-set>

...

<fo:block xsl:use-attribute-sets="colouredText spacedText">
This block is both coloured and spaced!
</fo:block>

Um conjunto de atributos pode, por sua vez, referir-se a outros conjuntos:

<xsl:attribute-set name="colouredTitle" use-attribute-sets="colouredText">
<xsl:attribute name="font-size">16pt</xsl:attribute>
<xsl:attribute name="text-align">center</xsl:attribute>
</xsl:attribute-set>

A seção vinculada das especificações XSL 1.0 (ou a seção correspondente das especificações XSL 2.0) fornece mais informações sobre como os conjuntos de atributos podem ser estendidos e mesclados.