2008 13 Agustus 2008

Tokenizing String Delimited dalam sebuah XSL

Jika kebutuhan Anda adalah untuk membagi nilai node dalam XML, yang berisi string dipisahkan nilai, ke setiap item, maka Anda telah mencapai tempat yang tepat ... kita lihat contoh di bawah ini. Jika Anda sudah familiar dengan sedikit XML dan XSL ... Saya tidak berpikir Anda akan perlu penjelasan apapun.
Juga, contoh ini meliputi penggunaan fungsi XSL seperti xsl: call-template, xsl: substring-sebelumnya, xsl: substring-setelah, kalau itu yang Anda setelah.

XML untuk diubah (food.xml): -
Asumsikan tugas ini adalah untuk tokenize yang dibatasi string dengan koma, pada "kata kunci" 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>

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

Tak perlu dikatakan ... hanya mengubah parameter "delimitr" untuk pembatas pilihan Anda


2008 4 Agustus 2008

Sebuah masalah dengan posisi () dalam XSL ... atau itu?

Aku punya masalah strage saat membuat XSL hari ini. Mencari jawaban seluruh internet, tapi tak bisa menemukan .... Sebenarnya saya kira! Saya berkat tahu apa masalah saya, jadi apa yang saya cari?

Anyway! Hanya jika anda memiliki masalah yang sama juga dan entah bagaimana dengan kekuatan FORCE Anda berhasil mendarat di halaman ini ... Anda akan berterima kasih padaku ton ... Dan jika Anda telah sengaja mendarat di halaman ini untuk beberapa nasib aneh dan Anda berada pengembang XSL, DO MEMBUAT CATATAN INI SEKARANG, UNTUK MASA DEPAN penyebab, Jika suatu hari, Anda menghadapi masalah ini, maka FORCE mungkin tidak dengan Anda.

Soal pernyataan:
Aku punya XML, di mana ada dua node dengan beberapa item di dalamnya dan barang antara dua node memiliki korespondensi satu ke satu. Pada contoh di bawah, masing-masing item dalam <array simpul name="PLAYURL" /> berhubungan (posisi yang sesuai) untuk item dalam <array simpul 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>

Sekarang, saya memiliki satu lingkaran, di mana saya loop melalui <array name="SITENAME">, dan saya ingin mendapatkan item terkait (pada posisi yang sesuai) dalam <array name="PLAYURL">,

Apa yang Anda normaly akan mencoba lakukan adalah ...

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

MAAF! INI BEKERJA wont ... Ah! Surpised ...

Sekarang Anda mungkin akan ingin mencoba, hal seperti ini ...

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

Dan lagi ini tidak akan bekerja ... Sekarang Anda garuk-garuk kepala, mencoba untuk menghubungi semua orang yang Anda berpikir tahu beberapa XSL dan bisa membantu apapun ... Anda mencoba setiap pilihan lain ... dan masih wont work ... Nah! Thats apa yang terjadi pada saya minimal ...

DONT putus asa! TRY INI

<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 ASK ME WHY IT WORKS. Penyebab i dont memiliki alasan yang tepat ... jika Anda lakukan! Jangan menjatuhkan komentar. Mungkin cukup berguna. Juga! jika Anda memiliki JUDUL yang lebih baik untuk posting ini, melakukan drop me a line :)


2008 4 Mei 2008

Sertakan XSL dalam XSL

Jika XML / XSL Mentransformasi adalah domian Anda, maka ada kalanya kita ingin peice kode Dinamis untuk digunakan barang perpustakaan (yang akan dibuat dapat digunakan kembali). Yang saya maksud, mungkin bisa dibuat lebih jelas dengan skenario misalnya.

Bayangkan Anda membuat sebuah website (dan menggunakan XML, XSL transfroms ofcourse) dan sebagian besar halaman akan memiliki Modul Komentar. Nah! maka baik Anda menyalin atau sisipkan kode ini ke setiap halaman template (yang saya dont memiliki mengatakan, tapi membuat mimpi buruk pemeliharaan dan pengerjaan ulang) atau bahkan lebih baik, Anda membuat file TERMASUK yang bisa ditarik di mana pun Anda inginkan di halaman Anda ( s) ...
Jadi BAGAIMANA KITA MENCIPTAKAN file XSL TERMASUK dan termasuk di dalam file lain XSL? Berikut adalah bagaimana ...

Agar lebih jelas ... di sini adalah daftar singkat dari file yang Anda akan menciptakan ... di sini, kita akan termasuk info tentang buah-buahan dan sayuran ke dalam halaman induk disebut makanan.

1. food.xml - data xml file di mana transformasi akan diterapkan
2. food.xsl - utama XSL file, yang akan mengubah food.xml kami
3. inc_fruits.xsl - include file XSL yang akan membuat data buah-buahan
4. inc_vegtables.xsl - include file XSL yang akan membuat data vetetables

Aku nggak pikir saya harus menjelaskan banyak, kode untuk elemen di atas, akan cukup jelas ...

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>

Download semua file di atas sini (255 download)


2008 4 April 2008

Bekerja dengan Atribut Node XML XSLT

Jika Anda menggunakan XML dan XSL, maka Anda mungkin telah menemukan waktu, ketika Anda harus bermain-main dengan atribut dan nilai dari node XML XSL Anda. Mereka banyak situs dengan info panjang lebar tentang hal ini, namun tidak satupun saya temukan adalah singkat dan tepat ... Ini adalah TIDAK TUTORIAL XML / XSL, tapi upaya saya untuk menempatkan bersama-semacam daftar contekan ...

Sampel XML yang kita akan bekerja dengan terlihat seperti ini ...

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

Jadi Mari kita mulai mengubah XML di atas kita menggunakan XSL

Contoh 1: Menampilkan nilai pada Atribut dipilih

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

Hasilnya akan terlihat seperti HTML

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


Contoh 2: Looping melalui dan menampilkan semua Nama Atribut XML dan Nilai mereka

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

Hasilnya akan terlihat seperti HTML


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


Download semua file di atas sini (248 download)



Lihat saja nanti, saya akan terus mengupdate ini dengan temuan baru ...


NDK rumah | Mengekspresikan TI | Langit-langit Mulut Mengekspresikan | Penmenship Mengekspresikan | Awe Mengekspresikan | Mengekspresikan Diriku