2008 4 agosto 2008

Un problema con la posizione () in XSL ... o è?

Ho avuto questo problema strage, mentre la creazione di un XSL oggi. Cercato delle risposte in tutta la rete, ma couldnt trovare .... In realtà credo! I furia so qual è il mio problema era, quindi cosa devo cercare?

In ogni caso! Solo nel caso in cui si verifica questo problema stesso troppo e in qualche modo dal potere della Forza è riuscito ad atterrare su questa pagina ... tu mi avrebbe ringraziato tonnellate ... E se avete accidentalmente atterrato su questa pagina per qualche strano destino e vi capita di essere uno sviluppatore XSL, FARE UNA NOTA DI QUESTO ORA, PER IL FUTURO causa, se un giorno, è necessario affrontare questo problema, allora la forza potrebbe non essere con voi.

Problema dichiarazione:
Ho questa XML, dove ci sono due nodi con più elementi in esso e gli elementi tra questi due nodi hanno una corrispondenza uno ad uno. Nell'esempio riportato di seguito, ogni elemento nel nodo <array name="PLAYURL" /> si riferisce (posizione corrispondente) a un elemento in <array nodo 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>

Ora, ho un ciclo in cui i loop through <array name="SITENAME">, e voglio ottenere l 'articolo correlato (nella posizione corrispondente) in <array name="PLAYURL">,

Che cosa si dovrebbe normalmente fare è provare ...

<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!! QUESTO non funzionerà ... Ah!! Mi sorprende ...

Ora probabilmente provare, qualcosa di simile ...

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

E Anche in questo caso non funzionerà ... Ora è grattarsi la testa, cercando di contattare tutti quelli che si pensa un po 'conosce XSL e potrebbe essere di alcun aiuto ... si tenta ogni altra opzione ... e ancora non funzionerà ... Beh! Questo è quello che è successo a me atleast ...

DONT DISPERAZIONE! PROVATE QUESTO

<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 PERCHE 'FUNZIONA. Perchè non ho una retta ragione ... se lo fate! Si prega di far cadere un commento. Potrebbe essere molto utile. Anche! se avete una migliore titolo per questo post, fare mi mandi due righe :)


2008 2 agosto 2008

Impostazione del DOCTYPE in XSL

La settimana scorsa ho creato un progressive HTML / CSS layout per un cliente, testato in IE6, IE7 e FF 3, sembrava perfettamente bene ... fino a! il layout è andato più in basso del ciclo manufacting. Non è riuscito. Elementi di layout di pagina appena andato in tutto il luogo in cui il layout HTML è stato convertito in XML e XSL applicato ... Bummer!

Non riuscivo a dormire bene durante il fine settimana, in previsione di Lunedi mattina, quando dovrò risolvere questo SH. ** Ma ora experince avere un po 'nel trattare con questo tipo di situazioni (Quirks browser, voglio dire), sapevo che aveva a che fare con niente altro che DOCTYPE .... ed è stato ...

Il problema:
Volete il controllo del DOCTYPE, dal momento che la vostra trasformazione include un DOCTYPE di default in modo esplicito, e il layout sarà fuori per un lancio.

La soluzione:
XSLT specifiche fornisce i metodi di output per impostare un DOCTYPE la scelta di. Inoltre, per noi sviluppatori dell'interfaccia utente, i temi di interesse sarebbero i metodi di output HTML e metodi di output XML .

Bene! prima ci si annoia, ecco la correzione.

Per esempio, se tu avessi il DOCTYPE seguente versione HTML:. -

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

Poi nel XSL si dovrebbe disporre di: -

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

e, infine! facciamo in modo l'output XSLT obbedisce al DOCTYPE che avete scelto.


2008 4 MAGGIO 2008

Includere all'interno XSL XSL

Se XML / XSL Trasforma il tuo domian, poi ci sono momenti in cui ci vogliono un pezzo del codice dinamico da utilizzare elemento di libreria (da effettuarsi riutilizzabile). Quello che voglio dire, probabilmente potrebbe essere reso più chiaro con questo scenario di esempio.

Immaginate di creare un sito web (e l'utilizzo di XML, XSL transfroms ofcourse) e la maggior parte delle pagine avrebbe un modulo commenti. Bene! allora o si copia o incolla il codice in ogni modello di pagina (che io non sono dire, ma fare la manutenzione e rielaborare un incubo) o ancora meglio, si crea un file di inclusione che potrebbe essere tirato in dove mai lo vuoi nella tua pagina ( s) ...
Così come possiamo creare un file XSL INCLUDE e includerlo in un altro file XSL? Ecco come ...

Giusto per fare chiarezza ... ecco breve lista di file che si creerebbe ... qui, ci saranno anche informazioni su frutta e verdura in una pagina padre chiamato cibo.

1. food.xml - file di dati XML su cui la trasformazione sarà applicato
2. food.xsl - file principale XSL, che trasformerà la nostra food.xml
3. inc_fruits.xsl - XSL file di inclusione che il rendering dei dati frutta
4. inc_vegtables.xsl - XSL file di inclusione che il rendering dei dati vetetables

Non credo che ho spiegare molto, i codici per gli elementi di cui sopra, sarà auto esplicativo ...

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>

Scarica tutti i file qui sopra (256 downloads)


2008 4 aprile 2008

Lavorare con gli attributi dei nodi XML in XSLT

Se si utilizza XML e XSL, allora si potrebbe sono imbattuto in un tempo, quando si deve giocare con gli attributi ei valori di nodi XML in voi XSL. Essi sono un sacco di siti con informazioni fiato lungo su questo, ma non ho trovato erano brevi e precise ... Questo non è un XML / XSL TUTORIAL, ma il mio tentativo di mettere insieme-una sorta di trucco lista ...

L'XML di esempio che ci lavoro con simile a questa ...

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

Quindi, consente di iniziare a trasformare la nostra in precedenza XML utilizzando XSL

Esempio 1: visualizzazione valore di un attributo scelto

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

Risultato HTML sarà simile a

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


Esempio 2: la ripetizione ciclica di e la visualizzazione di tutti i nomi degli attributi XML ei loro valori

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

Risultato HTML sarà simile a


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


Scarica tutti i file qui sopra (248 downloads)



Tieni d'occhio questo spazio, terrò questo aggiornamento con nuove scoperte ...


NDK casa | Esprimendo IT | Gusto Esprimendo | Penmenship Esprimendo | Awe Esprimendo | esprimermi