Toon posts:

XSL / XML xsl:value-of probleem

Pagina: 1
Acties:
  • 27 views sinds 30-01-2008

Verwijderd

Topicstarter
hallo allemaal, ik heb het volgende probleem:

(stel je hebt het volgende in XML)


<prodigy>
<album>
<titel>experience</titel>
<cijfer>9</cijfer>
</album>
<album>
<titel>music for the gilted generation</titel>
<cijfer>8</cijfer>
</album>
<album>
<titel>the fat of the land</titel>
<cijfer>7</cijfer>
</album>
</prodigy>


(op een vrij eenvoudige wijze uit te lezen met XSL for-each)


<TABLE BORDER="2">
<TR bgcolor="#9acd32">
<TD>*</TD>
<TD>titel</TD>
<TD>cijfer</TD>
</TR>
<xsl:for-each select="prodigy/album">
<TR>
<TD>
*
</TD>
<TD>
<xsl:value-of select="titel"/>
</TD>
<TD>
<xsl:value-of select="cijfer"/>
</TD>
</TR>
</xsl:for-each>
</TABLE>


(maar hoe is de <xsl:value-of select="?????"/> opgebouwd als de XML alsvolgt is)


<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="tweakers.xsl"?>
<page_root xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:cinclude="http://apache.org/cocoon/include/1.0">
<result xmlns:t="blabla">
<prodigy>
<album>
<t:field id="titel">experience</t:field>
<t:field id="cijfer">9</t:field>
</album>
<album>
<t:field id="titel">music for the gilted generation</t:field>
<t:field id="cijfer">8</t:field>
</album>
<album>
<t:field id="titel">the fat of the land</t:field>
<t:field id="cijfer">7</t:field>
</album>
</prodigy>
</result>
</page_root>


(met onderstaande XSL krijg ik 2 x de titel ipv titel, cijfer)


<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:t="blabla" >
<xsl:template match="/">
<HTML>
<BODY>
<TABLE BORDER="2">
<TR bgcolor="#9acd32">
<TD>*</TD>
<TD>titel</TD>
<TD>cijfer</TD>
</TR>
<xsl:for-each select="page_root/result/prodigy/album">
<TR>
<TD>
*
</TD>
<TD>
<xsl:value-of select="t:field"/>
</TD>
<TD>
<xsl:value-of select="t:field"/>
</TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>


(Hoe kan ik de titel en het cijfer op deze manier goed uitlezen ?)

Verwijderd

Je moet nu niet een element bij zijn naam gaan selecteren, maar gaan selecteren op waarde van een attribuut, in jouw geval de attribuut "id".
Dus het zou waarschijnlijk iets worden als:

code:
1
<.. select="@id='titel'" />

Verwijderd

Topicstarter
* titel cijfer
* false false
* false false
* false false

Verwijderd

Topicstarter
als ik nu gebruik:

<xsl:value-of select="t:field/@id='titel'"/>
<xsl:value-of select="t:field/@id='cijfer'"/>

krijg ik de volgende uitkomst:

* titel cijfer
* true true
* true true
* true true

de uitkomste zijn dus wel true, maar ik wil de eigenlijke waarde. weet iemand hoe dit moet ?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik vind het trouwens een beetje een vreemde xml-structuur :)

Een xml-tag zou zelf geen waarde mogen representeren, jouw prodigy-tag doet dat overduidelijk wel.
Nou maakt dat voor het voorbeeld/als test verder niet zo uit, maar het is wel iets waar je vanaf het begin rekening mee moet houden :)

offtopic:
Btw, het is "Music for the jilted generation" ;)

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
Verwijderd schreef op 31 mei 2003 @ 17:22:
als ik nu gebruik:

<xsl:value-of select="t:field/@id='titel'"/>
<xsl:value-of select="t:field/@id='cijfer'"/>
je bedoelt vast dit:

t:field[@id='title']

Verwijderd

Topicstarter
mijn dank is groot want dit was inderdaad wat ik bedoelde ja !!

Verwijderd

Topicstarter
dus:

<album>
<t:field id="titel">music for the gilted generation</t:field>
</album>

met:
<xsl:value-of select="album/t:field[@id='titel']"/>


MAAR !!! HOE ????

<t.album>
<t:field id="titel">music for the gilted generation</t:field>
</t.album>

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
t. ? met een punt in je naam alvast niet beginnen je weet toch wel dat : een namespace is?

zoals ACM al zei is je XML nogal 'weird' (ie waarom al die verschillende dingen? . : t:field?)


code:
1
2
3
4
5
<album>
    <title>Music For... </title>
    <group>Nirvana</group>
    <rating>10</rating>    
</album>


en in een DTD of XSD zet je dan welke data-types die elementen zijn maar das al erg ver...

Verwijderd

Topicstarter
excuses

dus:

<album>
<t:field id="titel">music for the gilted generation</t:field>
</album>

met:
<xsl:value-of select="album/t:field[@id='titel']"/>


MAAR !!! HOE ????

<t:album>
<t:field id="titel">music for the gilted generation</t:field>
</t:album>

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
code:
1
<xsl:value-of select="t:album/t:field[@id='titel']"/>


?

om je originele probleem nog: dus met multiple fields kun je ofwel nog een for-each doen in je album xpath (en dus alle t:fields iets doen - wat je dan weer in een xsl-template zet). Je kan ook:

t:album/t:field[0]
t:album/t:field[1]

doen maar echt mooi is dat niet.

[ Voor 70% gewijzigd door hobbit_be op 01-06-2003 12:17 ]


Verwijderd

Topicstarter
<xsl:value-of select="t:album/t:field[@id='titel']"/>
werkt niet !
toch heb ik het pad goed.
wat kan het dan toch zijn ?!

Verwijderd

Topicstarter
het is natuurlijk weer iets met namespaces, snap er niets van

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
t:album/t:field[@id='titel']

besef je wel dat deze xpath meerdere kan teruggeven?

Verwijderd

Topicstarter
ik moest in xsl een nieuwe namespace meegeven

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Mja, ik zou zeggen: http://www.w3schools.com/xpath voor een beetje oefenen met xpath. Probeer verder even wat te doen aan je manier van reageren, want dat geschreeuw met hoofdletters, uitroeptekens en heel de toestand zonder duidelijk te vertellen wat je probleem is schieten wij en vooral jij helemaal niets mee op.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1

Dit topic is gesloten.