N nkrantz Medlem sedan apr. 2002 830 inlägg Frågan 16 juli 2004 10:48 #1 Har en XML fil som ser ut i princip så här:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<sortiment>
<kategori id="1">
<namn>Kategori 1</namn>
<produkt id="1">
<namn>Produkt 1</namn>
<langd>12</langd>
</produkt>
</kategori>
<kategori id="2">
<namn>Kategori 2</namn>
<underkategori id="2.1">
<namn>Underkategori 2.1</namn>
<produkt id="1">
<namn>Produkt 1</namn>
<bredd>42</bredd>
</produkt>
</underkategori>
<underkategori id="2.2">
<namn>Underkategori 2.2</namn>
<produkt id="1">
<namn>Produkt 2</namn>
<bredd>60</bredd>
</produkt>
</underkategori>
</kategori>
<kategori id="3">
<namn>Kategori 3</namn>
<underkategori id="3.1">
<namn>Undekategori 3.1</namn>
<produkt id="1">
<namn>Produkt 1</namn>
<volym>70</volym>
</produkt>
</underkategori>
<underkategori id="3.2">
<namn>Undekategori 3.2</namn>
<produkt id="1">
<namn>Produkt 1</namn>
<volym>70</volym>
</produkt>
</underkategori>
</kategori>
</sortiment>
När jag i min XSL fil skall presentera dessa så stöter jag på problemet att det i de olika underkategorierna finns olika "variabler" som jag bara vill visa beroende på vilken underkategori det är.
På något sätt vill jag alltså selektera och kolla om det matchar, exempelvis i Kategori 1 vill jag visa längd, i kategori 2 bredden och i kategori 3 volymen.
Hur göra?
mvh,
Niclas
toha Medlem sedan dec. 1999 707 inlägg Hur fungerar det med det här?
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="sortiment">
<xsl:apply-templates select="kategori" />
</xsl:template>
<xsl:template match="kategori">
<h1><xsl:value-of select="namn" /></h1><br />
<xsl:apply-templates select="//produkt" />
</xsl:template>
<xsl:template match="produkt">
<p>Produkt i kategori: <xsl:value-of select="ancestor::kategori/@id" />.<br />
<xsl:choose>
<xsl:when test="ancestor::kategori/@id = '1'">
Längd: <xsl:value-of select="langd" />,
</xsl:when>
<xsl:when test="ancestor::kategori/@id = '2'">
Bredd: <xsl:value-of select="bredd" />,
</xsl:when>
<xsl:when test="ancestor::kategori/@id = '3'">
Volym: <xsl:value-of select="volym" />.
</xsl:when>
</xsl:choose>
</p>
</xsl:template>
</xsl:stylesheet>
Man kanske måste ha MSXML 4.0 för att få det där med ancestor:: att fungera. Är osäker. :O
toha Medlem sedan dec. 1999 707 inlägg Förresten, du använder väl CookTop? http://www.xmlcooktop.com/
N nkrantz Medlem sedan apr. 2002 830 inlägg Tror att jag nog kan lösa det utifrån din kod! Tackar!
Nope, använder inte CookTop, men det kanske är dags att börja nu ;) Tack även för detta!
// Nippe
N nkrantz Medlem sedan apr. 2002 830 inlägg Hm, kanske var det där MSXML 4.0 som krävdes, får nämligen:
Expected token 'eof' found ':'. ancestor-->:<--:kategori/@id = '2'
Hur löser jag det, kan man ladda ner MSXML 4.0?
/N
@nders Medlem sedan juni 2000 32 967 inlägg http://www.microsoft.com/xml/
(för övrigt är Cooktop hemsk. Men det är väl en smaksak. ;) )
mvh
N nkrantz Medlem sedan apr. 2002 830 inlägg okej, tack för det!
Men vad händer om den som besöker sidan inte har MSXML 4.0? Jag har det senaste i mitt system uppdaterat, och jag verkar ju inte ha det...
CookTop fattade jag mindre av... :)
N nkrantz Medlem sedan apr. 2002 830 inlägg Hm, får det ändå inte att funka.
Finns det något annat sätt att lösa if-problemet? Som PHP kille tycker jag ju att <xsl:when bla=2> borde räcka...
// Nippe
@nders Medlem sedan juni 2000 32 967 inlägg Tja, om du låter klienten transformera på det viset så kräver du ju att klienten har 4:an också. Annars kan du ju alltid transformera på servern och skicka ifrån dig färdig html...
N nkrantz Medlem sedan apr. 2002 830 inlägg Jo, men det är det jag gör! (Är ett litet skolprojekt bara...) Fast det verkade ändå som om att ancestor:: funkade från början, för när jag bara kopierade koden som toha hade så fick jag inget fel...
Så det är väl något annat, får leta vidare!
Tack!
/N
N nkrantz Medlem sedan apr. 2002 830 inlägg Jag får fel när jag försöker göra en selection i min kod:
<xsl:if test="@id = 2">
hej
</xsl:if>
Den klagar på Expected token 'eof' found '='. @id -->=<-- 0
Någon som kan förklara lite enkelt vad det innebär och hur jag löser det!?!
toha Medlem sedan dec. 1999 707 inlägg
(för övrigt är Cooktop hemsk. Men det är väl en smaksak. )
Jo det är sant att det inte är ett särskilt vackert eller användarvänligt program men jag gillar att xpath-konsollen i den samt att man kan göra en xlst-transform i det. Dessutom är det ju gratis. :)