webForumDet fria alternativet

Ny på det här...

XML

11 svar · 477 visningar · startad av nkrantz

Medlem sedan apr. 2002830 inlägg
Frågan#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

Medlem sedan dec. 1999707 inlägg
#2

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

Medlem sedan dec. 1999707 inlägg
#3

Förresten, du använder väl CookTop? http://www.xmlcooktop.com/

Medlem sedan apr. 2002830 inlägg
#4

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

Medlem sedan apr. 2002830 inlägg
#5

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

Medlem sedan juni 200032 967 inlägg
#6

http://www.microsoft.com/xml/

(för övrigt är Cooktop hemsk. Men det är väl en smaksak. ;) )

mvh

Medlem sedan apr. 2002830 inlägg
#7

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... :)

Medlem sedan apr. 2002830 inlägg
#8

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

Medlem sedan juni 200032 967 inlägg
#9

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...

Medlem sedan apr. 2002830 inlägg
#10

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

Medlem sedan apr. 2002830 inlägg
#11

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!?!

Medlem sedan dec. 1999707 inlägg
#12

(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. :)

254 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)