/ / Jak ustawić kolor w xslt raz dla wszystkich pól - zmienne, xslt, kolory

Jak ustawić kolor w xslt jeden raz dla wszystkich pól - zmiennych, xslt, kolorów

Czy mogę ustawić zmienną lub coś do powiedzenia„czerwony” raz i kiedy chcę, aby jakaś czcionka była czerwona, po prostu nazywam tę zmienną? w ten sposób mogę z łatwością edytować kolor całego określonego tekstu dla przyszłych możliwości. Jestem nowy w xslt i doceniam każdą pomoc. Dziękuję.

Edycja: dodanie kodu z tym, co chciałbym.

<?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>

Odpowiedzi:

1 dla odpowiedzi № 1

Korzystanie z attribute-set to opcja warta zbadania. Inną opcją jest zrobienie tego, co zacząłeś:

<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>

Zwróć uwagę, że zadeklarowanie zmiennej na najwyższym poziomieszablonu ogranicza jego zakres tylko do tego szablonu. Możesz zadeklarować zmienne globalne (na najwyższym poziomie arkusza stylów, poza jakimkolwiek szablonem), aby udostępnić je w dowolnym miejscu arkusza stylów.


1 dla odpowiedzi nr 2

Możesz zdefiniować nazwany zestaw atrybutów jako bezpośrednie dziecko xsl:stylesheetzawierający atrybuty, których chcesz użyć ponownie:

<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>

a następnie użyj go podczas tworzenia elementów z xsl:copy, xsl:element lub z dosłownym elementem wyniku:

<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>

Jeśli zmienią się wymagania wyjściowe („Oprócz tego, że są czerwone, ważne informacje muszą być również pogrubione” / „Zapomnij o kolorze, po prostu ustawiłem je kursywą” / „Spróbuj użyć Comic Sans”) wystarczy dostosować definicje atrybutów w zestawie atrybutów, bez konieczności modyfikowania szablonów, w których stosowane są te „style”.

Wartość xsl:use-attribute-sets atrybut jest oddzielany białymi znakami lista nazw zestawów atrybutów:

<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>

Zestaw atrybutów może z kolei odnosić się do innych zestawów:

<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>

Połączona sekcja specyfikacji XSL 1.0 (lub odpowiednia sekcja specyfikacji XSL 2.0) zawiera dalsze informacje o tym, jak można rozszerzać i łączyć zestawy atrybutów.