2008 Sierpień 13 2008

Tokenizing łańcuchem znaków rozdzielonych wewnątrz XSL

Jeśli wymogiem jest, aby podzielić węzła wartość w formacie XML, który zawiera łańcuchem znaków rozdzielonych wartości do poszczególnych elementów, to osiągnie właściwe miejsce ... spojrzeć na poniższy przykład. Jeśli jesteś zaznajomiony z odrobiną XML i XSL ... Nie sądzę, by trzeba żadnych wyjaśnień.
Również ten przykład obejmuje korzystanie z funkcji XSL jak xsl: call-template, xsl: substring-before, xsl: substring-after, jeśli to, co jesteś po.

XML do transformacji (food.xml): -
Załóżmy, że zadanie to tokenize na string ograniczoną przecinkiem, w tag "słów kluczowych"

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

Wynikowy wyjście 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>

Nie trzeba dodawać ... po prostu zmienić parametr "delimitr" do ogranicznika do wyboru


2008 4 sierpnia 2008 r.

Problem z pozycją () w XSL ... albo to jest?

Miałem ten problem strage podczas tworzenia XSL dziś. Poszukiwanie odpowiedzi w całej sieci, ale nie potrafił znaleźć żadnego .... Właściwie myślę! I dint wiem, co mój problem był, więc co mam szukać?

Tak! Na wszelki wypadek masz ten sam problem zbyt bardzo i jakoś przez mocą mocy, jakiej udało się wylądować na tej stronie ... chcesz mi podziękować ton ... A jeśli przypadkowo wylądował na tej stronie jakiegoś dziwnego losu i zdarzy ci się być Deweloper XSL, DO zanotuj to teraz, w przyszłości przyczyn, jeśli niektóre dni można napotkać ten problem, wtedy siła nie może być z tobą.

Oświadczenie problem:
Mam ten XML, w którym są dwa węzły z wielu elementów w nim i elementy pomiędzy tymi dwoma węzłami mieć jeden do jednego korespondencję. W poniższym przykładzie, każda pozycja w węźle <array name="PLAYURL" /> odnosi (odpowiedni pozycja) do elementu w węźle <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 mam pętlę, gdzie i pętli <array name="SITENAME"> i chcę, aby uzyskać powiązanych artykułów w odpowiedniej pozycji) w <array name="PLAYURL">,

Co byś normalnie spróbuj zrobić to ...

<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! TO wont pracy ... Ach! Surpised ...

Teraz będzie prawdopodobnie chcesz spróbować, coś takiego ...

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

I znowu to przyzwyczajenie pracować ... Teraz zarysowania głowę, próbując skontaktować się z każdego, kto zna trochę uważasz, XSL i może być żadną pomocą ... spróbować każdą inną opcję ... i nadal to przyzwyczajenie pracować ... Cóż! Thats co mi się conajmniej ...

DONT Rozpacz! TRY 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>

Nie pytaj mnie dlaczego to działa. Bo nie mam z prawym rozumem ... jeśli to zrobisz! Proszę wrzucić komentarz. To może być całkiem przydatne. Również! jeśli masz lepszy tytuł dla tego postu, to napisz do mnie linii :)


2008 04 maja 2008

Dołącz XSL wewnątrz XSL

Jeśli XML / XSL Transforms jest twój Domian, to są chwile, kiedy chcemy peice Dynamic którego należy użyć elementu biblioteki (należy dokonać ponownego użytku). Co mam na myśli, prawdopodobnie mogłyby być bardziej wyraźne w tym scenariuszu przykład.

Wyobraź sobie, że stworzenie strony internetowej (i za pomocą XML, XSL transfroms ofcourse) i większość stron będzie miała moduł Komentarze. Dobrze! następnie skopiować lub wkleić ten kod do każdego szablonu strony (co nie mam powiedzieć, ale uczynić konserwację i przerobienie koszmar) lub jeszcze lepiej, utworzyć INCLUDE plik, który mógłby zostać zainstalowane gdziekolwiek chcesz go na swojej stronie ( s) ...
Jak więc utworzyć plik XSL INCLUDE i umieścić go wewnątrz innego pliku XSL? Oto jak ...

Aby sprawę jasno ... tutaj jest szybki listę plików, które można utworzyć ... tutaj, będziemy w tym informacje o owoce i warzywa do strony macierzystej zwanej żywności.

1. food.xml - xml pliku danych, w której transformacja będzie stosowana
2. food.xsl - główny plik XSL, która przekształci naszą food.xml
3. inc_fruits.xsl - XSL zawiera plik, który uniemożliwi owoce danych
4. inc_vegtables.xsl - XSL zawiera plik, który uniemożliwi dane vetetables

Ja tego nie zrobiłem że muszę wyjaśnić dużo, kody do powyższych elementów, będzie oczywista ...

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>

Pobierz wszystkie powyższe pliki w tym miejscu (252 pliki do pobrania)


2008 04 kwietnia 2008

Praca z atrybutami węzła XML w XSLT

Jeśli korzystasz z XML i XSL, to mogłeś natknąć się na czas, kiedy trzeba się bawić z atrybutów i wartości węzłów XML w was XSL. Są one mnóstwo stron z długim nawijanej informacji na ten temat, ale żaden znalazłem były krótkie i precyzyjne ... To nie jest XML / XSL TUTORIAL, ale moja próba put-razem jakieś Cheat listy ...

Próbka XML, że będziemy pracować z wygląda tak ...

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

A więc zaczynamy przekształcając naszą powyżej XML przy użyciu XSL

Przykład 1: Wyświetlanie wartości w wybranym Atrybut

<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 wynik będzie wyglądał

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


Przykład 2: krążący i wyświetlając wszystkie XML nazwy atrybutów i ich wartości

<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 wynik będzie wyglądał


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


Pobierz wszystkie powyższe pliki w tym miejscu (245 pliki do pobrania)



Obserwuj ten miejsca, będę aktualizacji to z nowymi ustaleniami ...


NDK startowej | Wyrażając IT | Podniebienie Wyrażając | Penmenship Wyrażając | Awe Wyrażając | Wyrażając Myself