Toon posts:

[XSL] lege cellen & header

Pagina: 1
Acties:

Verwijderd

Topicstarter
als toevoeging op mijn andere post (maar niet nodig hierbij):

1) hoe moet ik lege cellen behandelen, op de volgende manier worden ze "overgeslagen" en komen de volgende cellen in dezelfde rij dus in de verkeerde kolom terecht:
code:
1
2
3
  <xsl:template match="website/medewerkers/medewerker/*">
    <td><xsl:apply-templates/></td>
  </xsl:template>

we hebben er een geweldig boek bij (Oracle XML Applications, O'Reilly) ;( , Google heeft z'n werk gedaan en ook de search hier leverde niets op..

2) hoe zorg ik ervoor dat ik headers aan mijn tabel toevoeg, volgens een ander voorbeeld als volgt, maar bij mij wil het maar niet werken:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 <xsl:template match="website/medewerkers">
    <table border="1" cellspacing="0">
      <xsl:apply-templates select="website/medewerkers/medewerker[1]/*" mode="ColumnHeaders"/>
      <xsl:apply-templates/>
    </table>
  </xsl:template>
  <xsl:template match="website/medewerkers/medewerker">
    <tr><xsl:apply-templates/></tr>
  </xsl:template>
  <xsl:template match="website/medewerkers/medewerker/*">
    <td><xsl:apply-templates/></td>
  </xsl:template>
  <xsl:template match="website/medewerkers/medewerker[1]/*" mode="ColumnHeaders">
    <th><xsl:value-of select="name(.)"/></th>
  </xsl:template>

overigens ("xsql-snippet"):

code:
1
2
3
4
...
<website connection="xmlbook" xmlns:xsql="urn:oracle-xsql">
  <xsql:query rowset-element="categories" row-element="category" tag-case="lower">
...

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
zou je misschien een relevante snippet uit de xml die je wilt transformeren kunnen posten? anders is het zo lastig helpen :)

de meesten van ons zijn nl. denk ik weinig bekend met xsql...

[ Voor 21% gewijzigd door Genoil op 10-12-2003 18:38 ]


Verwijderd

Topicstarter
ja tuurlijk, maar leek me niet al te relevant.. het gaat er in beide gevallen om dat er data wordt binnengehaald met een query >> dit wordt in xml gegoten en komt er ongeveer zo uit te zien (ja da's inderdaad wel wat duidelijker):

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<website>
  <medewerkers>
    <medewerker>
      <mnr>1</mnr>
      <naam>Jansen</naam>
      <comm>1200</comm>
      ...
    </medewerker>
    <medewerker>
      <mnr>2</mnr>
      <naam>Pannenkoek</naam>
      <comm></comm>
      ...
    </medewerker>
  </medewerkers>
</website>


zie in het bijzonder die lege 2e <comm>-tag

deze xml wordt gegenereerd aan de hand van onderstaande xsql:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="medewerkers.xsl"?>
<!--
<xsql:include-xsql href="sitemenu.xsql" xmlns:xsql="urn:oracle-xsql"/>
-->
<website connection="xmlbook" xmlns:xsql="urn:oracle-xsql">
  <xsql:query rowset-element="medewerkers" row-element="medewerker" tag-case="lower">

  SELECT mnr, naam, voorl, functie, chef, gbdatum, maandsal, afd
    FROM medewerkers

  </xsql:query>
</website>

Verwijderd

volgens mij moet het zoiets worden:
code:
1
2
3
  <xsl:template match="website/medewerkers/medewerker[string-length(medewerker) &gt; 0]/*">
    <td><xsl:apply-templates/></td>
  </xsl:template>


Deze template matcht dus alle medewerkers die een string-lengte van meer dan 0 hebben.

Disclaimer: niet getest

[edit]
Volgens mij heb ik de openingspost niet helemaal goed gelezen, ik dacht dat de lege cellen niet overgeslagen zouden moeten worden, terwijl dat nu wel gebeurt... sorry

[ Voor 29% gewijzigd door Verwijderd op 10-12-2003 22:42 ]


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ik heb ff zitten pielen, en kom nu tot de conclusie dat onderstaande sheet nagenoeg hetzelfde is als die van jou, alleen heb ik de xpath's wat korter gemaakt.
dat helpt, met name voor die headers.

ik heb ook geen probleem met td's die niet gerenderd worden waardoor de boel opschuift, maar dat heb ik met jou originele sheet ook niet (Sablotron 0.9). alleen jammer dat er dan geen lege cel staat maar "helemaal niks" (<td />), maar dat was niet echt je probleem toch? [edit]: ook dat heb ik nu ff goedgemaakt, hij rendert nu een <br /> in een lege cel.

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
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
    <xsl:output indent="yes"/>
    
    <xsl:template match="//medewerkers">
        <table border="1" cellspacing="0">
          <tr><xsl:apply-templates select="medewerker[1]/*" mode="header" /></tr>
          <xsl:apply-templates/>
        </table>
    </xsl:template>
    
    <xsl:template match="medewerker">
        <tr><xsl:apply-templates/></tr>
    </xsl:template>
    
    <xsl:template match="medewerker/*">
        <td>
            <xsl:choose>
                <xsl:when test="string-length(.) > 0">
                    <xsl:value-of select="."/>
                </xsl:when>
                <xsl:otherwise>
                    <br />
                </xsl:otherwise>
            </xsl:choose>
        </td>
    </xsl:template>
    
    <xsl:template match="medewerker[1]/*" mode="header">
        <th><xsl:value-of select="name()"/></th>
    </xsl:template>
    
</xsl:stylesheet>

[ Voor 33% gewijzigd door Genoil op 10-12-2003 23:12 ]


Verwijderd

Topicstarter
bedankt, ik ga het morgenochtend op school direct proberen (Oracle thuis installeren, dacht t niet..)

als-ie een lege tag tegenkwam, werd het dus niet eens een "<td></td>", maar helemaal niets (i.t.t. Sablotron blijkbaar)

door jullie stukken code snap ik een en ander in ieder geval weer beter, tnx!

PS Het (x)sql-gedeelte boeit mij ook niet zo, maar dat moet nou eenmaal ff.. XML en XSL des te meer, maar dan moet er nog ff iets als MySQL bij ofzo.. we worden helemaal geindoctrineerd met Oracle (>> PL/SQL) op school :r

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Verwijderd schreef op 10 december 2003 @ 23:35:
als-ie een lege tag tegenkwam, werd het dus niet eens een "<td></td>", maar helemaal niets (i.t.t. Sablotron blijkbaar)
ik vermoedde al zoeits. nou dan gaat mijn sheet nog steeds niet werken voor je (denk ik). misschien kun je kijken of je wat settings aan je xslt processor kunt instellen zodat ie lege tags wel parsed.

  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
opvulling voor lege < td >`s: ALT+255

dit is een ASCII spatie, ongeveer hetzelfde als: & nbsp; deze spaties worden ALTIJD gepakt, anders dan een normale spatie

[ Voor 30% gewijzigd door BasSpruit op 11-12-2003 10:45 ]


Verwijderd

Topicstarter
hey, ik ben er net mee bezig.

hoe voer ik zo'n ALT+255 in mijn .xsl in dan? heb wel wat geprobeerd met UltraEdit en zelfs Word, maar ik krijg er niet zo'n "spatie" in.

code:
1
2
3
4
5
6
7
8
9
10
11
  <xsl:template match="medewerker">
    <tr><xsl:apply-templates/></tr>
  </xsl:template>

  <xsl:template match="medewerker/*[ comm = 0 ]">
    <td>-<xsl:apply-templates/></td>
  </xsl:template>

  <xsl:template match="medewerker/*">
    <td><xsl:apply-templates/></td>
  </xsl:template>

nou op de plaats van die "0" (comm = 0) moet dus zo'n "spatie" als ik het goed begrijp, omdat XML zo'n teken heeft staan in een schijnbaar lege tag? (die "-" zou dus weergegeven moeten worden als <comm> "leeg" is.)

@Genoil: de headers werken in ieder geval, bedankt :) het probleem van de lege tags is dus niet opgelost, ik heb wat instellingen bekeken, maar ik kan dat niet vinden

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Verwijderd schreef op 11 december 2003 @ 11:01:
hey, ik ben er net mee bezig.

hoe voer ik zo'n ALT+255 in mijn .xsl in dan? heb wel wat geprobeerd met UltraEdit en zelfs Word, maar ik krijg er niet zo'n "spatie" in.
XSLT:
1
<xsl:text> </xsl:text>

Deze moet werken volgens mij :)

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Verwijderd

Topicstarter
@Rickets, dit was vast niet je bedoeling, maar dit is wat ik nu heb (heb nog wel ff geprobeerd met quotes enzo):

code:
1
2
3
  <xsl:template match="medewerker/*[ comm = <xsl:text> </xsl:text>]">
    <td>-<xsl:apply-templates/></td>
  </xsl:template>


XML parse error at line 25, char 46
'<' cannot appear in attribute value.


ook iets met een choose-when constructie faalde hopeloos


offtopic:
*djkappi voelt zich beetje stupid*

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Verwijderd schreef op 11 december 2003 @ 11:21:
@Rickets, dit was vast niet je bedoeling, maar dit is wat ik nu heb (heb nog wel ff geprobeerd met quotes enzo):
Inderdaad, ik bedoelde
code:
1
<td><xsl:text> </xsl:text></td>

Ik denk dat ik begrijp nu wat je bedoelt, ik denk even mee ;)

[edit]
Je kan volgens mij 1 van de volgende dingen doen:
  • comm=''
  • not(string(comm))
  • De string-length opvragen van de text()
Bijvoorbeeld
code:
1
2
3
<xsl:template match="medewerker/*[ comm = '' ]">
    <td><xsl:text> </xsl:text></td>
  </xsl:template>

[ Voor 54% gewijzigd door Rickets op 11-12-2003 11:40 ]

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Verwijderd

Topicstarter
*meedenken wordt enorm gewaardeerd door djkappi*

ik snap het niet helemaal, maar daarmee blijft de output erg wit

hiermee blijft hetzelfde probleem:

code:
1
2
3
4
5
6
7
  <xsl:template match="medewerker/*">
    <td><xsl:apply-templates/></td>
  </xsl:template>

  <xsl:template match="medewerker/*[ comm ]">
    <td><xsl:text> </xsl:text></td>
  </xsl:template>

maar ik ben toch niet de eerste die lege tags tegenkomt :+ het zal wel liggen aan de xsql-query of de manier waarop de xsl geprocessed wordt. ik zal eens proberen of ik met die query wat kan bereiken, dus er direct een "0" ingooien als-ie leeg is ofzo..

edit:

whooo, nu komt alles tegelijk.. ik probeer ff wat en kom zo wel met resultaten

[ Voor 18% gewijzigd door Verwijderd op 11-12-2003 11:36 ]


Verwijderd

Topicstarter
kheb het voor zover maar opgegeven, er is nog meer te doen..
denk niet dat de andere noobs @ school er wel uit zijn gekomen trouwens, UITERAARD ligt t aan de docenten..

wat heb ik nou geleerd: geen lege cellen toestaan in een sql-database. :X

toch vind ik t maar raar, ik blijf er niet graag mee zitten :(

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
kun je je database niet zo in elkaar zetten dat er gewoon altijd iets in cellen staat die niet gebruikt worden? Of dat ie bij een NULL value gewoon iets anders in het resultaat zet?

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 17-02 19:31
lege spatie.. daar gebruiken we hier altijd
code:
1
 
oid voor....

en kan je niet iets doen met choose when otherwise?

klinkt mij als een dood ordinaire "if-then-else" constructie... if leeg dan <td>spatie</td> else <td>info</td>

  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
Verwijderd schreef op 11 december 2003 @ 11:01:
hey, ik ben er net mee bezig.

hoe voer ik zo'n ALT+255 in mijn .xsl in dan? heb wel wat geprobeerd met UltraEdit en zelfs Word, maar ik krijg er niet zo'n "spatie" in.
[noob mode=???]
ALT+255: druk op ALT (bij mij direct links EN rechts van de spatiebalk (die lange balk onderin))

houdt ALT ingedrukt.

zoek je numerieke toetsenbord op ( die toetsen aan de rechterkant van je toetsenbord die je zowat nooit gebruikt ) en toets: <2><5><5>.

(niet de groter-dan en de kleiner-dan gebruiken!!!)
[/noob] :P
hmm? duidelijk genoeg? ik denk dat een computer-beginner dit zelfs nog beledigend vind, dus ik stop met het tikken van deze onzin.

let er echter WEL op dat je ALLEEN de cijfers op je numerieke toetsenbord gebruikt, want anders pakt ie het niet.

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
het probleem is volgens mij niet dat er spaties neergezet moeten worden, maar dat de XML parser van Oracle sowieso niet matched op lege tags. het is in dit geval ook niet mogelijk eventjes wat spaties bij de xml in te hacken, omdat de xml die als bron dient voor een transformatie, dynamisch gegenereerd wordt vanuit xsql.

  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
Genoil schreef op 11 december 2003 @ 16:45:
het probleem is volgens mij niet dat er spaties neergezet moeten worden, maar dat de XML parser van Oracle sowieso niet matched op lege tags. het is in dit geval ook niet mogelijk eventjes wat spaties bij de xml in te hacken, omdat de xml die als bron dient voor een transformatie, dynamisch gegenereerd wordt vanuit xsql.
dan zal de xsl - file dit moeten opvangen. veel andere opties blijven er dan niet over. maar als het goed is, kan je in je query het ISNULL - statement gebruiken. (onder MS-SQL in elk geval wel)

Syntax: ISNULL(veldnaam, waarde-als-NULL-true-is)

Verwijderd

Topicstarter
bedankt voor alle tips!

ik heb echt ALLES geprobeerd maar het ging gewoon niet werken en mijn docent ging er nota bene niet eens op in! het is vast niet onmogelijk, maar ik laat het er maar bij.

ik hou het er maar op dat het aan de XML parser van Oracle ligt (zoals Genoil zegt)..
Pagina: 1