2008 August 13 2008

Tokenizing oddeľovačmi reťazec vnútri XSL

Ak vašu požiadavku rozdeliť uzla hodnotu vo formáte XML, ktorý obsahuje reťazec oddelený hodnoty, do jednotlivých položiek, potom ste na správne miesto ... pozrite sa na nižšie uvedenom príklade. Ak ste oboznámení s trochou XML a XSL ... Nemyslím si, že budete potrebovať nejaké vysvetlenie.
Aj tento príklad zahrňuje použitie funkcií ako je XSL xsl: call-template, xsl: substring-before, xsl: substring-after, či to, čo ste po ňom.

XML, ktoré sa spracovávajú (food.xml): -
Predpokladajme, že úlohou je tokenize reťazec oddelený čiarkou, v na "kľúčových slov" tagov

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

Výsledná výstup 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>

Netreba dodávať, že ... stačí zmeniť parameter "delimitr" na oddeľovač podľa vlastného výberu


2008 Augusta 4. 2008

Problém s umiestnením () v XSL ... alebo je to?

Mal som tento problém strage pri vytváraní XSL dnes. Hľadali odpovede na celom internete, ale couldnt nájsť žiadne .... Vlastne myslím, že! Ja viem, čo dint môj problém bol, tak čo mám hľadať?

Každopádne! Len v prípade, že máte tento istý problém taky a nejako o moc síl sa vám podarilo pristáť na tejto stránke ... ďakujem by ste mi veľa ... A ak ste náhodou pristál na tejto stránke nejakú podivnú osudom a sa stalo, že developer XSL, DO MAKE A túto skutočnosť na vedomie TERAZ do budúcna príčiny, ak je nejaký deň, budete čeliť tomuto problému, potom sila nemusí byť s vami.

Problém vyhlásenie:
Mám tento XML, kde sú dva uzly s viac položiek v ňom a tovaru medzi týmito dvoma uzlami majú jeden na jedného korešpondenciu. V nižšie uvedenom príklade, každá položka v uzle <array name="PLAYURL" /> týka (zodpovedajúcej pozície) na položku v uzle <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>

Teraz mám slučku, kde aj cez slučku <array name="SITENAME">, a chcem sa dostať súvisiace položky (na zodpovedajúcu pozíciu) v <array name="PLAYURL">,

Čo by ste normálne snažiť urobiť, je ...

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

SORRY! TENTO zvyknutý fungovať ... Ach! Surpised ...

Teraz by ste asi chceli vyskúšať, niečo také ...

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

A opäť to zvyknutý pracovať ... Teraz ste poškriabaniu vašej hlave, snaží sa obrátiť každý, kto si myslíte, že pozná nejaký XSL a mohla by byť žiadny zmysel ... pokusu každú inú možnosť ... a ešte to nebude fungovať ... No! To je čo sa mi stalo aspon ...

Dont Zúfalstvo! Skúste to

<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ýtaj sa ma prečo to funguje. Príčina i dont mať správny dôvod ... ak nechcete! Prosím, Drop komentár. To by mohlo byť celkom užitočné. Tiež! Ak máte lepší názov pre tento post, to ma vysadil riadku :)


2008 04.05.2008

Patrí XSL v XSL

Ak XML / XSL transformácie je váš domian, potom tam sú časy, kedy chceme peice Dynamic Kód pre knižnice položky (ktoré sa majú vykonať opakovane použiteľné). Čo mám na mysli, by pravdepodobne byť jasnejšie v tomto príklade scenára.

Predstavte si, že vytvorenie webovej stránky (a pomocou XML, XSL transfroms Samozrejme) a väčšina stránok by mal Komentáre modul. No! potom buď kopírovanie alebo vložte tento kód do každej šablóny stránky (čo Nemám povedať, ale aby údržby a opráv nočná mora), alebo ešte lepšie, môžete vytvoriť INCLUDE súbor, ktorý by mohol byť vtiahnutá, kde niekedy budete chcieť do stránky ( y) ...
Tak ako sa Vytvárame XSL INCLUDE súbor a zahrnúť ho do iného súboru XSL? Tu je, ako ...

Stačí, aby sa veci jasné ... tu je stručný prehľad súborov, ktoré si vytvorí ... tu budeme, vrátane informácií o ovocie a zeleninu do materskej stránky s názvom jedlo.

1. food.xml - xml súbor dát, na ktorých bude aplikovať transformácie
2. food.xsl - hlavná XSL súbor, ktorý zmení naše food.xml
3. inc_fruits.xsl - XSL patrí súbor, ktorý bude poskytovať ovocie dát
4. inc_vegtables.xsl - XSL patrí súbor, ktorý bude poskytovať vetetables dát

I dont myslím, že mám značnej miery vysvetľujú, kódy pre vyššie uvedených skutočností bude vysvetľovať ...

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>

Stiahnuť všetky vyššie uvedené súbory tu (250 stiahnutie)


2008 04.04.2008

Práca s atribútmi uzlov XML v XSLT

Ak používate XML a XSL, potom ste možno narazili na dobu, kedy budete musieť pohrať s vlastnosťami a hodnotami XML uzlov vo vás XSL. Sú hŕbu miest s dlhou zubořezu informácií o tomto, ale žiadny som našiel boli krátke a presné ... To nie je XML / XSL tutoriál, ale môj pokus dať dohromady, nejaký cheat zoznam ...

Vzorka XML, že budeme pracovať s vyzerá takto ...

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

Umožňuje tak začína transformácia našej nad XML pomocou XSL

Príklad 1: Zobrazenie hodnoty na vybrané parametre

<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 Výsledok bude vyzerať

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


Príklad 2: Opakovanie pomocou XML a zobrazenie všetkých názvy atribútov a ich hodnoty

<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 Výsledok bude vyzerať


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


Stiahnuť všetky vyššie uvedené súbory tu (244 stiahnutie)



Na tomto mieste, budem držať aktualizáciu to s novými poznatkami ...


NDK domov | Vyjadrenie IT | Vyjadrenie poschodia | Vyjadrenie Penmenship | Vyjadrenie Awe | Vyjadrenie Myself