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 № 1Korzystanie 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:stylesheet
zawierają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.