2008 August 2008 4

Et problem med posisjon () i XSL ... eller er det?

Jeg hadde dette strage problemet mens du oppretter en XSL i dag. Så etter svar i hele nettet, men kunne ikke finne noen .... Egentlig vel! Jeg dint vet hva mitt problem var, så hva ser jeg etter?

Uansett! Bare i tilfelle du har denne samme problemet også og liksom i kraft av den FORCE du klarte å lande på denne siden ... du ville takke meg tonnevis ... Og hvis du har et uhell havnet på denne siden for noen merkelig skjebne, og du tilfeldigvis være en XSL utvikler, gjør en oppmerksom på dette NÅ, FOR FRAMTIDEN årsak, dersom en dag, står du dette problemet, så FORCE ikke kan være sammen med deg.

Problem statement:
Jeg har denne XML, hvor det er to noder med flere elementer i den og de elementer mellom disse to nodene har en 1-1 korrespondanse. I eksempelet nedenfor, hvert element i noden <array name="PLAYURL" /> gjelder (tilsvarende posisjon) til et element i den noden <array name="SITENAME" />

<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>

Nå har jeg en løkke, hvor jeg sløyfe <array name="SITENAME">, og jeg ønsker å få den relaterte element (ved tilsvarende posisjon) i <array name="PLAYURL">,

Hva ville du normalt prøve gjøre er ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

DESSVERRE! DENNE wont arbeide ... Ah!! Surpised ...

Nå ville du sannsynligvis ønske å prøve, noe som dette ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Og igjen denne wont arbeide ... Nå skrape hodet, prøver å kontakte alle som du tror vet noe XSL og kunne være til noen hjelp ... du prøver annenhver alternativ ... og fortsatt den wont arbeide ... Vel! Dvs hva som skjedde med meg atleast ...

DONT Fortvilelse! PRØV DETTE

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Dont spør meg hvorfor det fungerer. Fordi jeg ikke har en rett grunn ... hvis du gjør! Vennligst slippe en kommentar. Det kan være ganske nyttig. Også! hvis du har bedre tittel for dette innlegget, gjør send meg en linje :)


2008 August 2008 2

Stille DOCTYPE i XSL

Forrige uke jeg opprettet en progessive HTML / CSS layout for en klient, testet det i IE6, IE7 og FF 3, virket helt greit ... helt til! oppsettet gikk videre nedover manufacting syklus. Det mislyktes. Side layoutelementer bare gikk over alt da HTML layouten ble omgjort til XSL og XML brukt til det ... Bummer!

Kunne ikke sove ok i løpet av helgen, i påvente av mandag morgen, da jeg må fikse dette SH **. Men nå har en litt experince i å håndtere denne type situasjoner (leser quirks, mener jeg), visste jeg at det hadde å gjøre med annet enn DOCTYPE .... og det var ...

The Problem:
Du ønsker kontroll over DOCTYPE, siden transformasjon vil inneholde en standard DOCTYPE eksplisitt, og du layout vil være ute for en kaste.

The Solution:
XSLT specs gir utgang metoder for å sette en DOCTYPE av choise. Også for oss UI utviklere, ville temaer av interesse være HTML-utdata metoder og XML utgang metoder .

Vel! før du blir lei, her er fix.

For eksempel, hvis du hadde følgende DOCTYPE i din HTML-versjon:. -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Så i XSL ville du ha følgende: -

<xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" />

og slutt! gjør at XSLT utgang lystrer DOCTYPE du har valgt.


2008 4 mai 2008

Inkluder XSL inne XSL

Dersom XML / XSL Transforms er din domian, så det er tider da vi ønsker en peice av dynamisk kode som skal brukes biblioteket element (gjøres gjenbrukbare). Hva jeg mener, kan trolig gjøres mer tydelig med dette eksempelet scenariet.

Tenk deg at du oppretter et nettsted (og bruker XML, XSL transfroms selvfølgelig), og de ​​fleste sidene vil ha en Kommentarer modul. Vel! så enten du kopiere eller lime inn denne koden på hver side mal (som jeg ikke har si, men gjør vedlikehold og bearbeide et mareritt) eller enda bedre, oppretter du en include-fil som kan trekkes i hvor enn du vil ha den på siden din ( e) ...
Så Hvordan skaper vi en XSL include-fil og inkludere den i en annen XSL-fil? Her er hvordan ...

Bare for å gjøre ting klart ... her er rask liste over filer som du ville skape ... her, vil vi bli inkludert informasjon om frukt og grønnsaker inn i en overordnet side som heter mat.

1. food.xml - XML-datafil der transformasjon vil bli anvendt
2. food.xsl - main XSL-fil, noe som vil forvandle vår food.xml
3. inc_fruits.xsl - XSL inkluderer fil som vil gi frukter data
4. inc_vegtables.xsl - XSL inkluderer fil som vil gjøre vetetables data

Jeg tror ikke jeg har forklare mye, kodene for ovennevnte elementer, vil være selvforklarende ...

FOOD.XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>

<vegetables>
<item name="spinach" moreinfo="http://www.spinach.com">Spinach is full of iron</item>
<item name="asparagus" moreinfo="http://www.asparagus.com">Asparagus contains loads of vitamin D </item>
<item name="fenugreek" moreinfo="http://www.fenugreek.com">Fenugreek is rich in vitamin C</item>
</vegetables>
</food>


FOOD.XSL


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="inc_fruits.xsl" />
<xsl:include href="inc_vegetables.xsl" />
<xsl:template match="/">
<html>
<head>
<title>Title</title>
</head>
<body>
<h3><xsl:value-of select="/food/description" /></h3>
Modification Date : <xsl:value-of select="/food/date" />
<hr/>
<h5> About Fruits</h5>
<xsl:call-template name="about_fruits"/>

<hr/>
<h5> About Vegetables</h5>
<xsl:call-template name="about_vegetables"/>

<hr/>
</ Body>
</ Html>
</ Xsl: template>
</ Xsl: stylesheet>


INC_FRUITS.XSL

<?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" encoding="iso-8859-1" />
<xsl:template name="about_fruits">
<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


INC_VEGETABLES.XSL

<?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" encoding="iso-8859-1" />
<xsl:template name="about_vegetables">
<xsl:for-each select="/food/vegetables/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Last ned alle filene over her (252 nedlastinger)


2008 4 april 2008

Arbeide med XML Node attributter i XSLT

Hvis du bruker XML og XSL, så du kan ha kommet over en tid, når du må spille rundt med attributter og verdier XML noder i deg XSL. De er massevis av steder med lang omstendelig info om dette, men ingen jeg fant var kort og presis ... dette er ingen XML / XSL opplæringen, men mitt forsøk på å sette-sammen en slags jukse-listen ...

Utvalget XML som vi vil jobbe med ser slik ut ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>
</food>

Så Lar begynne å transformere vår ovenfor XML bruker XSL

Eksempel 1: Viser verdien ved en valgt attributt

<xsl:value-of select="/food/fruits/item[@name='orange']" /><br />
to get more information about <a href="{/food/fruits/item[@name='orange']/@moreinfo}" target="new" ><xsl:value-of select="/food/fruits/item[@name='orange']/@name" /> </a>

HTML resultatet vil se ut

Orange is the color and rich in vitamin C,
to get more information about <a href="http://www.orange.com" target="new">


Eksempel 2: Looping gjennom og vise alle XML attributtnavnene og deres verdier

<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>,
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>

HTML resultatet vil se ut


attribute name : name, attribute value : mango
attribute name : moreinfo, attribute value : http://www.mango.com
attribute name : name, attribute value : banana
attribute name : moreinfo, attribute value : http://www.banana.com
attribute name : name, attribute value : orange
attribute name : moreinfo, attribute value : http://www.orange.com
attribute name : name, attribute value : Papaya
attribute name : moreinfo, attribute value : http://www.papaya.com


Last ned alle filene over her (245 nedlastinger)



Se denne plassen, vil jeg holde oppdatere denne med nye funn ...


NDK hjem | Uttrykke IT | Uttrykke Palate | Uttrykke Penmenship | Uttrykke Awe | uttrykke meg