2008 Srpen 13 2008

Tokenizing oddělovači řetězec uvnitř XSL

Pokud váš požadavek rozdělit uzlu hodnotu ve formátu XML, který obsahuje řetězec oddělený hodnoty, do jednotlivých položek, pak jste na správné místo ... podívejte se na níže uvedeném příkladu. Pokud jste obeznámeni s trochou XML a XSL ... Nemyslím si, že budete potřebovat nějaké vysvětlení.
Také tento příklad zahrnuje použití funkcí jako je XSL xsl: call-template, xsl: substring-before, xsl: substring-after, jestli to, co jste po něm.

XML, které se zpracovávají (food.xml): -
Předpokládejme, že úkolem je tokenize řetězec oddělený čárkou, v na "klíčových slov" tagů

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

Netřeba dodávat, že ... stačí změnit parametr "delimitr" na oddělovač dle vlastního výběru


2008 Srpna 4. 2008

Problém s umístěním () v XSL ... nebo je to?

Měl jsem tento problém strage při vytváření XSL dnes. Hledali odpovědi na celém internetu, ale couldnt najít žádné .... Vlastně myslím, že! Já vím, co dint můj problém byl, tak co mám hledat?

Každopádně! Jen v případě, že máte tento samý problém taky a nějak o moc sil se vám podařilo přistát na této stránce ... děkuji byste mi spoustu ... A pokud jste náhodou přistál na této stránce nějakou podivnou osudem a se stalo, že developer XSL, DO MAKE A tuto skutečnost na vědomí NYNÍ do budoucna příčiny, pokud je nějaký den, budete čelit tomuto problému, pak síla nemusí být s vámi.

Problém prohlášení:
Mám tento XML, kde jsou dva uzly s více položek v něm a zboží mezi těmito dvěma uzly mají jeden na jednoho korespondenci. V níže uvedeném příkladu, každá položka v uzlu <array name="PLAYURL" /> týká (odpovídající pozice) na položku v uzlu <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>

Teď mám smyčku, kde i přes smyčku <array name="SITENAME">, a chci se dostat související položky (na odpovídající pozici) v <array name="PLAYURL">,

Co byste normálně snažit udělat, 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 zvyklý fungovat ... Ach! Surpised ...

Nyní byste asi chtěli vyzkoušet, něco takového ...

<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ět to zvyklý pracovat ... Teď jste poškrábání vaší hlavě, snaží se obrátit každý, kdo si myslíte, že zná nějaký XSL a mohla by být žádný smysl ... pokusu každou jinou možnost ... a ještě to nebude fungovat ... No! To je co se mi stalo aspoň ...

Dont Zoufalství! Zkuste 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 Zeptej se mě proč to funguje. Příčina i dont mít správný důvod ... pokud nechcete! Prosím, Drop komentář. To by mohlo být docela užitečné. Také! Pokud máte lepší název pro tento post, to mě vysadil řádku :)


2008 04.05.2008

Patří XSL v XSL

Pokud XML / XSL transformace je váš domian, pak tam jsou časy, kdy chceme peice Dynamic Kód pro knihovny položky (které mají být provedeny opakovaně použitelné). Co mám na mysli, by pravděpodobně být jasněji v tomto příkladu scénáře.

Představte si, že vytvoření webové stránky (a pomocí XML, XSL transfroms Samozřejmě) a většina stránek by měl Komentáře modul. No! pak buď kopírování nebo vložte tento kód do každé šablony stránky (což Nemám říct, ale aby údržby a oprav noční můra), nebo ještě lépe, můžete vytvořit INCLUDE soubor, který by mohl být vtažena, kde někdy budete chtít do stránky ( y) ...
Tak jak se Vytváříme XSL INCLUDE soubor a zahrnout jej do jiného souboru XSL? Zde je, jak ...

Stačí, aby se věci jasné ... tady je stručný přehled souborů, které si vytvoří ... tady budeme, včetně informací o ovoce a zeleninu do mateřské stránky s názvem jídlo.

1. food.xml - xml soubor dat, na kterých bude aplikovat transformace
2. food.xsl - hlavní XSL soubor, který změní naše food.xml
3. inc_fruits.xsl - XSL patří soubor, který bude skýtat ovoce dat
4. inc_vegtables.xsl - XSL patří soubor, který bude skýtat vetetables dat

I dont myslím, že mám značné míry vysvětlují, kódy pro výše uvedených skutečností bude vysvětlovat ...

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>

Stáhnout všechny výše uvedené soubory zde v 252 stažení)


2008 04.04.2008

Práce s atributy uzlů XML v XSLT

Používáte-li XML a XSL, pak jste možná narazili na dobu, kdy budete muset pohrát s vlastnostmi a hodnotami XML uzlů ve vás XSL. Jsou spousty míst s dlouhou zubořezu informací o tomto, ale žádný jsem našel byly krátké a přesné ... To není XML / XSL tutoriál, ale můj pokus dát dohromady, nějaký cheat seznam ...

Vzorek XML, že budeme pracovat s vypadá 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číná transformace naší nad XML pomocí XSL

Příklad 1: Zobrazení hodnoty na vybrané parametry

<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ýsledek bude vypadat

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


Příklad 2: Opakování pomocí XML a zobrazení všech názvy atributů a jejich 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ýsledek bude vypadat


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


Stáhnout všechny výše uvedené soubory zde (245 stažení)



Na tomto místě, budu držet aktualizaci to s novými poznatky ...


NDK domů | Vyjádření IT | Vyjádření patra | Vyjádření Penmenship | Vyjádření Awe | Vyjádření Myself