[XSLT] role= naar CSS-class

Pagina: 1
Acties:

  • Savantas
  • Registratie: December 2002
  • Laatst online: 08:41
Ik ben bezig met een kleine aanpassing in de XSLT, zodat het mogelijk is in DocBook een attribute mee te geven aan een tabel-cell die dan via een licht aangepaste XSLT de tekst vertikaal laat zien. (Alleen IE, inderdaad, maar in Mozilla geeft ie de tekst gewoon horizontaal weer. Het is meer een oplossing voor grote tabellen (o.a. wetteksten) met grote koppen en in de kolom verder alleen enkele karakters))

Ik heb wel wat geprobeerd en me rot gegoogled, maar kom er niet uit.

Hier een stukje voorbeeld (DocBook)-XML:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<thead>
    <row>
        <entry valign="top" namest="c1" nameend="c2" role="upright">
            <para>Deze tekst moet vertikaal</para>
        </entry>
        <entry valign="top" align="center" role="upright">
            <para>Meer tekst upright</para>
        </entry>
        <entry valign="top">
            <para>   </para>
        </entry>
    </row>
</thead>


En hier de code die ik in table.xsl wil stoppen:
code:
1
2
3
4
5
6
7
8
9
10
11
<!--    Begin change  -->
<!--    Look for attribute role=upright
    and add class='vertup' to the cell -->

    <xsl:if test="@role = 'upright'">
      <xsl:attribute name="class">
        <xsl:text>vertup</xsl:text>
      </xsl:attribute>
    </xsl:if>

<!--  End of change -->


Iemand een idee?

Ik heb het idee half afgekeken van een vergelijkbare aanpassing om in DocBook bij een ulink 'role=newwindow' te zetten, die dan dus netjes een nieuw venster opent. Zie voor origineel hier

Zit ik nu een beetje in de goede richting, of loop ik geblinddoekt door het XSLT-bos (vast 't laatste)

Ik zal in ieder geval nog eens in de dikke WROX (XSLT Programmer's Reference: 2nd Edition) duiken, maar vind het boek niet echt lekker lezen...

Ik denk niet zwart-wit, ik denk diapositief! ( ͡° ͜ʖ ͡°)


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
[b][message=19269263,noline]

Ik zal in ieder geval nog eens in de dikke WROX (XSLT Programmer's Reference: 2nd Edition) duiken, maar vind het boek niet echt lekker lezen...
hej geen kwaad woord over de XSLT-kabouter he! De XSLT-kabouter roeleert _/-\o_

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Wat voor output krijg je? En zet je XML en XSLT eens online. :)

Rustacean


  • Savantas
  • Registratie: December 2002
  • Laatst online: 08:41
Hmm, zal morgen eens kijken.
De XSL is de standaard voor DocBook, en die is nogal uitgebreid, dus dat even posten... ;)

Ik denk niet zwart-wit, ik denk diapositief! ( ͡° ͜ʖ ͡°)


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Alleen de lokale XML en XSLT dan, waar het fout gaat.

Rustacean


  • Savantas
  • Registratie: December 2002
  • Laatst online: 08:41
Hmm, de XML is in India geconverteerd vanaf een boek, en ik zie nu dat ze zelf aan de entry als attribute meegeven rotate="1". Dit is conform DocBook-definitie, maar met XSL-transformatie naar (X)HTML doet ie daar dus niets mee.

code:
1
2
3
4
5
6
7
8
9
10
11
<informaltable frame="all">
<tgroup>
<thead>
<row>
<entry valign="top" align="center" rotate="1">
<para>wonen</para>
</entry>
</row>
</thead>
</tgroup>
</informaltable>


en hier het stukje uit de table.xsl (docbook xhtml)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 <xsl:template match="thead|tfoot">
  <xsl:element name="{name(.)}" namespace="http://www.w3.org/1999/xhtml">
   <xsl:if test="@align">
    <xsl:attribute name="align"><xsl:value-of select="@align"/></xsl:attribute>
   </xsl:if>

<!-- Begin change  -->
<!-- by Epco de Ruiter
Look for attribute role=upright
and add class='upright' to the cell -->
   <xsl:if test='@rotate = "1"'>
    <xsl:attribute name="class"><xsl:text>upright</xsl:text></xsl:attribute>
   </xsl:if>
<!--  End of change -->

   <xsl:if test="@char">
    <xsl:attribute name="char"><xsl:value-of select="@char"/></xsl:attribute>
   </xsl:if>
   <xsl:if test="@charoff">
    <xsl:attribute name="charoff"><xsl:value-of select="@charoff"/></xsl:attribute>
   </xsl:if>
   <xsl:if test="@valign">
    <xsl:attribute name="valign"><xsl:value-of select="@valign"/></xsl:attribute>
   </xsl:if>
   <xsl:apply-templates select="row[1]">
    <xsl:with-param name="spans">
     <xsl:call-template name="blank.spans">
      <xsl:with-param name="cols" select="../@cols"/>
     </xsl:call-template>
    </xsl:with-param>
   </xsl:apply-templates>
  </xsl:element>
 </xsl:template>


Ik kan het helaas niet laten zien met de juiste css-koppeling, welke in onze database wordt aangeroepen. Maar in de css staat (ja, alleen IE5+/w32):
code:
1
.upright { writing-mode: tb-rl; filter: flipv fliph }


De output is dus gewoon de tekst in de tabel, niet verticaal gezet

[ Voor 46% gewijzigd door Savantas op 18-11-2003 14:09 ]

Ik denk niet zwart-wit, ik denk diapositief! ( ͡° ͜ʖ ͡°)


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Misschien helpt het als je de test verandert in "@rotate = 1"? Dus de quotes weglaten. Met quotes zou ie namelijk kunnen denken dat het een string is, terwijl het ding in de XML een getal is, lijkt me.

Rustacean


  • Savantas
  • Registratie: December 2002
  • Laatst online: 08:41
Goede suggestie, maar helaas, werkt niet :'(

Ik denk niet zwart-wit, ik denk diapositief! ( ͡° ͜ʖ ͡°)


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Vreemd, zeer vreemd. Ik ben bang dat ik het dan ook niet echt weet.

Rustacean


  • Savantas
  • Registratie: December 2002
  • Laatst online: 08:41
In ieder geval bedankt, ik ben nu bezig met het XSLT boek van Michael Kay door te spitten.

Ik denk niet zwart-wit, ik denk diapositief! ( ͡° ͜ʖ ͡°)


Verwijderd

Hai E, Ik denk dat het opgelost is als je een <div> om het te kantelen woord zet:

<div>
<xsl:attribute name="style">
writing-mode: tb-rl; filter: flipv fliph
</xsl:attribute>

<xsl:value-of select="para"/>
</div>

Dat lijkt te werken in een testopstellinkje van me.

  • Savantas
  • Registratie: December 2002
  • Laatst online: 08:41
Ja, dat zal vast werken, aangezien de style dan bij elke TH staat. Maar is mijns inziens niet echt mooi. Ik heb het liever met een class op de th, en dan met een aparte css meteen voor de hele site (of sites) te wijzigen.
Het gekke met de bovenstaande code is dat de uiteindelijke html gewoon geen class bevat. En het gaat niet om elke th, want dan zou ik dat natuurlijk gewoon in de css zetten.
Ik denk dat de code wel goed is, maar ik heb het denk ik verkeerd in de (nogal uitgebreide) xsl van DocBook staan. Dus ga ik maar eens op zoek naar een andere lokatie.

Met XSLT kan je ook een eigen xsl maken en dan daarin je eigen specifieke aanpassingen, en dan vervolgens DocBook hierin aanroepen. Werkt best mooi als je een element wil bewerken, maar hier gaat het om de attribute van een element, dus net ff anders. Maar ik ga toch nog eens proberen op deze manier te beunen. 8)7

Maar dankje voor het meedenken HP ;)

[ Voor 3% gewijzigd door Savantas op 19-11-2003 21:06 ]

Ik denk niet zwart-wit, ik denk diapositief! ( ͡° ͜ʖ ͡°)


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Kan je die .XSL anders even ergens online zetten? En de XML ook, liefst. :)

Rustacean


Verwijderd

Wat ik probeerde te illustreren is dat je volgends mij een een html tag nodig hebt om een attribute aan te geven via xsl:attrib. vandaar mijn <div> tag.

Het kan denk ik ook een andere tag zijn. En je kunt ook een class-verwijzing erinzetten, als je dat liever hebt dan style. zie mijn nieuwe testopstellinkje:


-------------------epco.xml--------
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="epco.xsl"?>


<informaltable frame="all">
<tgroup>
<thead>
<row>
<entry valign="top" align="center" rotate="1">
<para>wonen</para>
</entry>
</row>
</thead>
</tgroup>
</informaltable>
------ einde epco.xml----------------


----------------epco.xsl-----------------
<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<style type="text/css">
.hp {writing-mode: tb-rl; filter: flipv fliph; }
</style>

<xsl:for-each select="informaltable/tgroup/thead/row/entry">

<!-- Begin change -->
<div>
<xsl:attribute name="class">
hp
</xsl:attribute>

<!-- End of change -->
<xsl:value-of select="para"/>
</div>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>
--------einde epco.xsl------------------------

ps1: geinig elkaar zo weer eens tegen te komen
ps2: hoe doe je dat met die coole vakken met code?

  • Savantas
  • Registratie: December 2002
  • Laatst online: 08:41
Inderdaad ook mijn bedoeling, maar ik wilde ten eerste de css als extern bestand, in plaats van de style embedden, dus
code:
1
2
3
<style type="text/css">
.hp {writing-mode: tb-rl; filter: flipv fliph; }
</style>
skippen, en .hp {writ...} gewoon bij de gebruikte css voor de gehele site zetten.
Daarnaast wilde ik de div omzeilen, en direct de th class=hp meegeven. Dat lukt dus niet... :'(
Maar ik zal eens proberen of dit wel werkt, dit is toch minder specifiek gericht op de th, meer globale definitie.

Playstation1: Ik was al verbaasd door de 'Hai E'... Inderdaad redelijk onverwacht! Wat eengekke naam ook voor de xml/xsl :P

Playstation2: Je zet er gewoon (rechte haak)code(rechte haak) voor, en (rechte haak)/code(rechte haak) achter :)

Playstation3: Manuzhai: De XSL is momenteel de standaard DocBook XHTML-xsl (zie DocBook.org) met alleen kleine aanpassing dus in de ulink, zodat je met role=newwindow kan definieren dat er een nieuw venster opent (Goh! ;) )
De XML is van een abonnee-site en kan ik wegens auteursrecht niet even open gooien. :P Ik kan misschien wel even de testportal verrijken met een tijdelijk account, maar moet ik eerst even overleggen...

[ Voor 5% gewijzigd door Savantas op 20-11-2003 16:08 ]

Ik denk niet zwart-wit, ik denk diapositief! ( ͡° ͜ʖ ͡°)


  • Savantas
  • Registratie: December 2002
  • Laatst online: 08:41
Arggghhhh...
Kom er vandaag achter dat de gebruikte database de XML bij uploaden al omzet en als hapklare brokken HTML in de database zet. Dat was me niet verteld... 8)7
Mooi, kan ik eens opnieuw proberen om er nu wel iets uit te krijgen...

Ik denk niet zwart-wit, ik denk diapositief! ( ͡° ͜ʖ ͡°)

Pagina: 1