2008 August 2008 13

Tokenizing Skilletegn String inne en XSL

Hvis kravet er å splitte en node verdi i en XML, som inneholder en avgrenset streng av verdi, i individuelle elementer, da har du nådd riktig sted ... ta en titt på eksempelet nedenfor. Hvis du er kjent med litt av XML og XSL ... jeg tror ikke du ville trenge noen forklaring.
Også dette inkluderer eksempel på bruk av XSL-funksjoner som xsl: call-mal, xsl: delstreng-før, xsl: delstreng-etter, hvis det er det du er ute etter.

XML til å bli transformert (food.xml): -
Anta oppgaven er å tokenize strengen avgrenset med komma, i koden "søkeordene"

<?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>
<keywords>Fruits, Vegetables, Pulses, Meat, Cereals </keywords>
</food>

XSL (food.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="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>XSL 1.0 Delimited String Tokeniser</title>
</head>
<body>
<xsl:value-of select="food/meta"/>
<div >
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="food/keywords" />
<xsl:with-param name="delimitr" select="','" />
</xsl:call-template>

</div>
</body>
</html>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimitr" />
<xsl:choose>
<xsl:when test="contains($string, $delimitr)">
<div style="border:1px solid red;">
<h3><xsl:value-of select="substring-before($string,$delimitr)" /></h3>
<xsl:variable name="data" select="substring-before($string,$delimitr)"/>
</div>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="substring-after($string, $delimitr)" /><xsl:with-param name="delimitr" select="$delimitr" /></xsl:call-template>
</xsl:when>
<xsl:otherwise>
<div style="border:1px solid red;">
<h3><xsl:value-of select="$string" /></h3>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Resulterende utgang HTML: -

<div>
<div style="border: 1px solid red;">
<h3>Fruits</h3>
</div>
<div style="border: 1px solid red;">
<h3> Vegetables</h3>
</div>
<div style="border: 1px solid red;">
<h3> Pulses</h3>
</div>
<div style="border: 1px solid red;">
<h3> Meat</h3>
</div>
<div style="border: 1px solid red;">
<h3> Cereals </h3>
</div>
</div>

Unødvendig å si ... bare endre parameteren "delimitr" til skilletegnet av ditt valg


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 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 (249 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 (243 nedlastinger)



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


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