2008 4. August 2008

Ein Problem mit position () in XSL ... oder doch nicht?

Ich hatte dieses Problem strage während der Erstellung einer XSL heute. Suchte nach Antworten im gesamten Netz, bekam aber nicht fündig geworden .... Eigentlich habe ich erraten! Ich DINT wissen, was mein Problem war, so was muss ich achten?

Auf jeden Fall! Nur für den Fall haben Sie dieses sehr gleiche Problem haben und irgendwie durch die Macht des FORCE Sie es geschafft, auf dieser Seite landen ... Sie würden mir danken Tonnen ... Und wenn Sie zufällig auf dieser Seite aus irgendeinem seltsamen Schicksal gelandet sind und Sie gerade sind ein XSL-Entwickler, Machen Sie mal eine Anmerkung des mittlerweile auf, für die Zukunft verursachen, wenn eines Tages, Sie dieses Problem zu begegnen, dann ist die Kraft vielleicht nicht mit euch sein.

Problemstellung:
Ich habe diese XML, wo es zwei Knoten mit mehreren Objekte enthalten und die Elemente zwischen diesen zwei Knoten eine Eins-zu Eins-Entsprechung. Im Beispiel unten, jedes Element im Knoten <array name="PLAYURL" /> bezieht (entsprechend Position) auf einen Posten im Knoten <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>

Nun, ich habe eine Schleife, wo ich eine Schleife durch <array name="SITENAME">, und ich, um das entsprechende Element (an der entsprechenden Position) in <array name="PLAYURL"> erhalten möchten,

Was würden Sie normalerweise versuchen zu tun ist ...

<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! Diese nicht funktionieren ... Ah!! Überascht ...

Jetzt würden Sie wahrscheinlich wollen versuchen, so etwas wie dieses ...

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

Und wieder diese nicht funktionieren ... Jetzt am Kopf kratzen und versuchen, jeden, der etwas weiß, Sie denken, XSL und wenden könnte eine Hilfe sein ... Sie versuchen, jede andere Option ... und es immer noch nicht funktionieren ... Naja! Thats, was mir passiert ist atleast ...

AUSSCHLIEßEN DESPAIR! TRY THIS

<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 warum es funktioniert. Weil ich derzeit einen richtigen Grund haben ... wenn Sie das tun! Bitte einen Kommentar zu sinken. Es könnte sein, ziemlich nützlich. Auch! Wenn Sie besseren Titel für diesen Posten haben, tun Sie mir eine Zeile :)


2008 2. August 2008

Einstellen der DOCTYPE in XSL

Letzte Woche habe ich eine progressive HTML / CSS-Layout für einen Kunden, getestet in IE6, IE7 und FF 3, schien völlig in Ordnung ... BIS! Das Layout ging weiter unten in der fertigungsgerechtes Zyklus. Er scheiterte. Seitenlayout Elemente ging gerade ganz über dem Platz, wenn das HTML-Layout in XSL und XML angewendet, um es ... Bummer! Umgewandelt wurde!

Konnte nicht schlafen ok über das Wochenende im Vorgriff auf Montag morgen, als ich haben werde, um diese SH ** zu beheben. Aber jetzt mit ein wenig experince im Umgang mit dieser Art von Situationen (Browser Tücken, meine ich), wusste ich, es hatte mit nichts anderem zu tun, sondern DOCTYPE .... und es war ...

Das Problem:
Sie wollen die Kontrolle über die DOCTYPE, da Ihre Transformation wird eine Standard-DOCTYPE explizit enthalten, und Sie werden das Layout für einen Wurf.

Die Lösung:
XSLT-Spezifikationen bietet Methoden, um einen Ausgang der DOCTYPE der Wahl festgelegt. Auch für uns UI-Entwickler, würden die Themen von Interesse sein, HTML-Ausgabe Methoden und Verfahren der XML-Ausgabe .

Na ja! bevor Sie zu langweilen, hier ist der fix.

Für z. B., wenn Sie hatte die folgende DOCTYPE in Ihren HTML-Version:. -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Dann in der XSL müssten Sie über Folgendes verfügen: -

<xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" />

und endlich! Sie sicherstellen, dass Ihre XSLT-Ausgabe gehorcht der DOCTYPE Sie gewählt haben.


2008 4. Mai 2008

Fügen Sie XSL XSL innen

Wenn XML / XSL-Transformationen ist Ihr Domian, dann gibt es Zeiten, in denen wir eine peice von dynamischen Code verwendet werden Bibliothekselement (gemacht wiederverwendbar sein) wollen. Was ich meine, könnte wahrscheinlich deutlicher gemacht mit diesem Beispiel-Szenario werden.

Stellen Sie sich vor der Erstellung einer Website (und unter Verwendung von XML, XSL transfroms natürlich) und die meisten der Seiten würde ein Kommentar Modul haben. Na ja! dann entweder Kopieren oder fügen Sie diesen Code in jede Seite Vorlage (das ich nicht mehr haben zu sagen, aber die Wartung und Nacharbeit einen Alptraum) oder besser noch, erstellen Sie eine Include-Datei, die in, wo immer Sie wollen, dass es in Ihre Seite gezogen werden könnten ( e) ...
So wie schaffen wir eine XSL-Include-Datei und schließen es innerhalb eines anderen XSL-Datei? Hier ist, wie ...

Nur um das klarzustellen ... hier ist schnell Liste der Dateien, die Sie schaffen würde ... hier werden wir auch Infos über Obst und Gemüse in eine übergeordnete Seite aufgerufen Essen.

1. food.xml - XML-Datendatei auf dem die Transformation angewendet werden wird
2. food.xsl - Haupt-XSL-Datei, die unsere food.xml verändern wird
3. inc_fruits.xsl - XSL-Datei, die Früchte beinhalten Daten zu rendern wird
4. inc_vegtables.xsl - XSL-Datei, die gehören GEMÜSE Daten machen wird

I dont think Ich habe viel zu erklären, die Codes für die oben genannten Elemente, wird selbsterklärend sein ...

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>

Laden Sie all die oben genannten Dateien hier (248 Downloads)


2008 4. April 2008

Arbeiten mit XML-Knoten Attribute in XSLT

Wenn Sie XML-und XSL verwenden, dann könnten Sie über eine Zeit kommen können, wenn Sie spielen, um mit Attributen und Werten von XML-Knoten in XSL Sie haben. Sie sind Lasten von Standorten mit langatmigen Infos dazu, aber keiner fand ich waren kurz und präzise ... Dies ist KEINE XML / XSL-Tutorial, aber mein Versuch, Put-zusammen eine Art von Cheat-Liste ...

Die Probe XML, dass wir mit Arbeit sieht wie folgt aus ...

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

So Beginnen wir verändern unsere obige XML mit XSL

Beispiel 1: angezeigte Wert bei einem gewählten Attribut

<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-Ergebnis aussehen wird

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


Beispiel 2: Durchschleifen und Anzeigen aller XML-Attributnamen und deren Werte

<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-Ergebnis aussehen wird


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


Laden Sie all die oben genannten Dateien hier (243 Downloads)



Watch this space, ich werde eine Aktualisierung dieser mit neuen Erkenntnissen ...


NDK Hause | Ausdruck ihrer IT | Ausdruck Gaumen | Penmenship Ausdruck | Ausdruck Awe | mich auszudrücken