Hej! är ingen guru men borde det inte räcka med sub inne i den sista for-each:en... du är ju redan nere i rätt nod... alltså: Jo på sätt och vis, men då får jag ut: Har aldrig använt xml/xsl men har lite allmän prg kunskap Problemet är att antalet "poster" under <sub> varierar... så det är ingen lösning tyvärr. <?xml version="1.0" encoding="utf-8"?> Hej! nopp, det skriver bara ut länkarna, de blir inte klickbara.... Nåt sånt här kanske... Tack för all hjälp! Jag tycker absolut att XSLT är rätt teknik för detta, och att min lösning visst är snygg. Inte speciellt svårt för dig att komplettera den med A href osv. Något får du väl göra själv - här får du bara tankehjälp inte kompletta system som andra ska skriva åt dig.... =) Ola: Hej!Hjälp med att knåpa ihop XSL
Jag har en XML fil som jag vill få upp på en webbsida, av någon anledning får jag inte till det , det är vid taggen <sub> som det krånglar... Kan någon hjälpa mig?
XML filen ser ut så här (något bantad):
<?xml version="1.0" encoding="utf-8" ?>
<ftg>
<produkt>
<artEgenRub>2. Fjäderåtergångsmotorer</artEgenRub>
<sub />
</produkt>
<produkt>
<artEgenRub>2.1 Spjällmotorer</artEgenRub>
<sub />
</produkt>
<produkt>
<artEgenRub>3. Motorer - brand</artEgenRub>
<sub>
<artEgenRub2>motortyp1</artEgenRub2>
<artEgenRub2>motortyp2</artEgenRub2>
<artEgenRub2>motortyp3</artEgenRub2>
</sub>
</produkt>
<produkt>
<artEgenRub>4. VAV - flödesreglering</artEgenRub>
<sub />
</produkt>
<produkt>
<artEgenRub>5. Ventiler, motorer - vridande</artEgenRub>
<sub />
</produkt>
</ftg>
**************************************
Jag vill att det ska skrivas ut ungefär så här på webbsidan:
2. Fjäderåtergångsmotorer
2.1 Spjällmotorer
motortyp1
motortyp2
motortyp3
4. VAV - flödesreglering
5. Ventiler, motorer - vridande
******************************************
Och så här har jag skrivit XSL-filen
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="ftg/produkt">
<xsl:value-of select="artEgenRub" />
<br/>
<xsl:for-each select="ftg/produkt/sub">
<xsl:value-of select="artEgenRub2" /><br/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Vänligen KristoferSv: Hjälp med att knåpa ihop XSL
<code>
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="ftg/produkt">
<xsl:value-of select="artEgenRub" />
<br/>
<xsl:for-each select="sub">
<xsl:value-of select="artEgenRub2" /><br/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
</code>Sv: Hjälp med att knåpa ihop XSL
2. Fjäderåtergångsmotorer
2.1 Spjällmotorer
3. Motorer - brand
motortyp1
4. VAV - flödesreglering
5. Ventiler, motorer - vridande
Den skriver bara ut ett av elementen som kommer under sub-taggen, inte alla tre. Det är något knepigt med hur jag ska hantera denna delen:
<xsl:for-each select="sub">
<xsl:value-of select="artEgenRub2" /><br/>
</xsl:for-each>
Den vill liksom inte "loopa" ut alla värdena bara den första!
//KrisSv: Hjälp med att knåpa ihop XSL
Skulle kunna tro att det funkar om du skriver så här?
<sub>
<artEgenRub2>motortyp1</artEgenRub2>
</sub>
<sub>
<artEgenRub2>motortyp2</artEgenRub2>
</sub>
<sub>
<artEgenRub2>motortyp3</artEgenRub2>
</sub>
Men det finns säkert någon annan bättre lösning?Sv: Hjälp med att knåpa ihop XSL
//KSv: Hjälp med att knåpa ihop XSL
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="ftg/produkt"/>
</xsl:template>
<xsl:template match="produkt">
<xsl:value-of select="artEgenRub"/>
<br/>
<xsl:apply-templates select="sub"/>
</xsl:template>
<xsl:template match="sub">
<xsl:for-each select="artEgenRub2">
<xsl:value-of select="self::node()"/>
<br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Det går att lösa det på flera olika sätt men här är ett lösningsförslag!Sv: Hjälp med att knåpa ihop XSL
Tack nu börjar det arta sig, men då dyker ett nytt problem upp som jag inte nämnt tidigare. Jag ska även ha artEgenRub2 klickbar (listan är en del av ett menyval).
om den aktuella delen av XML filen ser ut så här:
<sub>
<link2>http://www.adress.se</link2>
<artEgenRub2>spjäll1</artEgenRub2>
<link2>http://www.enannaadress.se</link2>
<artEgenRub2>spjäll2</artEgenRub2>
</sub>
*******************************
Så skriver jag så här i XSL:en:
<xsl:template match="sub">
<xsl:for-each select="artEgenRub2">
<a>
<xsl:attribute name="href">
<xsl:value-of select="link2" />
</xsl:attribute>
<xsl:value-of select="self::node()"/>
</a>
<br/>
</xsl:for-each>
</xsl:template>
*********************************
den skriver ut länktexten men den får inte med link2, så länken går ingenstans.
Några tips?Sv: Hjälp med att knåpa ihop XSL
Så här kanske...
<xsl:template match="produkt">
<xsl:value-of select="artEgenRub"/>
<br/>
<xsl:apply-templates select="sub"/>
</xsl:template>
<xsl:template match="link2">
<xsl:value-of select="."/>
<br/>
</xsl:template>
<xsl:template match="artEgenRub2">
<xsl:value-of select="."/>
<p/>
</xsl:template>Sv: Hjälp med att knåpa ihop XSL
//K Sv: Hjälp med att knåpa ihop XSL
<code>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="ftg/produkt"/>
</xsl:template>
<xsl:template match="produkt">
<xsl:value-of select="artEgenRub"/>
<br/>
<xsl:apply-templates select="sub"/>
</xsl:template>
<xsl:template match="sub">
<xsl:for-each select="link2">
<xsl:if test="local-name(following-sibling::node())='artEgenRub2'">
<a>
<xsl:attribute name="href">
<xsl:value-of select="self::node()"/>
</xsl:attribute>
<xsl:value-of select="following-sibling::node()"/>
</a>
<br/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
</code>Sv: Hjälp med att knåpa ihop XSL
Det sista tipset var ovärdeligt...
Nu fungerar allt som det ska, lösningen är dock jäkligt osnygg!
Som någon här på forumet sa: "Känner man bara till hammaren ser alla problem ut som spikar"...
Jag har insett att mitt sätt att tänka från början var felaktigt. Jag borde ha löst mitt grundproblem med hjälp av JavaScript och XML, och inte blandat in ASP så mycket, så om någon har ett bra exempel på hur man bygger en "trädmeny" med JavaScript och XML så vore jag glad för tips.
mvh KrisSv: Hjälp med att knåpa ihop XSL
OlaSv: Hjälp med att knåpa ihop XSL
Jag håller på att lära mig XSL även jag men jag kan inte få ihop din lösning med en a tag på rätt ställe. Kan du inte visa hur du hade tänkt att det skulle fungera? Så kan dina kunskaper komma fler till gagn...Sv: Hjälp med att knåpa ihop XSL
Nejnej... det är inget fel på era förslag! Jag tackar så mycket för all hjälp.
Jag har ju bara presenterat lösa delar ur min lösning/problem så att ni ska slippa se hela eländet.
Istället för att ladda in hela menyn från XML från början så laddar jag in valda delar av XML filen mha querystrings som jag plockar mha ASP, detta för att jag ville ladda om sidan efter varje gång man har klickat, detta blev dock en dålig (rörig) lösning mot slutet och jag borde ha tänkt annorlunda, men man lär sig ju grejjer hela tiden och det är alltid kul att känna att man har tagit ett (åtminstone litet) steg framåt!
//Kris