2008 04 de agosto 2008

Un problema con la posición () en XSL ... ¿o no?

Tuve este problema al crear un Strage XSL hoy. Buscó respuestas en toda la red, pero no podía encontrar ninguna .... En realidad, supongo! Yo sé cuál es mi fuerza problema era, entonces, ¿qué debo buscar?

De todos modos! Sólo en caso de tener este mismo problema también y de alguna manera por el poder de la fuerza que logró aterrizar en esta página ... que me lo agradecería toneladas ... Y si alguna vez ha accidentalmente aterrizó en esta página por alguna extraña suerte y pasar a ser un desarrollador XSL, NO HAGA UNA NOTA DE ESTA AHORA, PARA EL FUTURO causa, Si algún día, se enfrenta a este problema, entonces la fuerza no podría estar con ustedes.

Enunciado del problema:
Tengo este XML, donde hay dos nodos con varios elementos en él y los elementos entre estos dos nodos tienen una correspondencia uno a uno. En el siguiente ejemplo, cada elemento en el nodo <array name="PLAYURL" /> se refiere (posición correspondiente) a un elemento en el nodo de <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>

Ahora, tengo un bucle, en el que recorrer <array name="SITENAME">, y quiero conseguir el artículo relacionado (en la posición correspondiente) en <array name="PLAYURL">,

Lo que normaly trataría de hacer es ...

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

LO SIENTO! Esto funcionará ... ¡Ah!! Gratamente ...

Ahora es probable que le gustaría probar, algo como esto ...

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

Y De nuevo, esto no funcionará ... Ahora que rascarse la cabeza, tratando de ponerse en contacto con todos los que usted piensa que sabe algo de XSL y podría ser de alguna ayuda ... intentar todas las opciones de otros ... y aún funciona costumbre ... Bueno! Eso es lo que me pasó el atleast ...

EXCLUIR LA DESESPERACIÓN! LA PRUEBA

<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 por qué funciona. Porque no tengo una razón bien ... si lo haces! Por favor deja un comentario. Puede ser muy útil. También! si usted tiene un mejor título para este post, lo mándenme una línea de :)


2008 02 de agosto 2008

Ajuste de la DOCTYPE en XSL

La semana pasada he creado un progresivo HTML / CSS de diseño para un cliente, probado en IE6, IE7 y FF 3, parecía estar perfectamente bien ... hasta que aparezca! el diseño fue más allá por el ciclo de manufacting. No pudo. Los elementos de diseño de página acaba de ir por todo el lugar cuando el diseño HTML se convirtió en XSL y XML aplicado a él ... Charlatán!

No podía dormir bien durante el fin de semana, en previsión de la mañana del lunes, cuando voy a tener que solucionar este problema SH **. Pero ahora tiene un poco de experincia en el tratamiento de este tipo de situaciones (no estándar del navegador, quiero decir), yo sabía que tenía que ver con nada más que DOCTYPE .... y fue ...

El problema:
Usted quiere que el control sobre el DOCTYPE, ya que su transformación se incluyen un DOCTYPE por defecto de forma explícita, y el diseño estará fuera por un sorteo.

La solución:
Ficha XSLT proporciona métodos de producción para establecer un DOCTYPE de la elección. Además, para nosotros los desarrolladores de la interfaz de usuario, los temas de interés serían los métodos de salida HTML y XML métodos de producción .

Bueno! antes de que te aburres, aquí está la solución.

Por ejemplo, si usted tenía el DOCTYPE siguiente en su versión HTML:. -

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

Luego, en el XSL que tendría que tener lo siguiente: -

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

y ¡Por fin! Cómo asegurarse de que su salida obedece a la XSLT DOCTYPE que usted ha elegido.


2008 04 de mayo 2008

Incluir dentro de XSL XSL

Si XML / XSL transforma es su domian, entonces hay momentos en los que quieren un pedazo de código dinámico para ser utilizado elemento de la biblioteca (que se hizo re-utilizables). Lo que quiero decir, probablemente podría ser más claro con este escenario de ejemplo.

Imagínese que usted está creando un sitio web (y el uso de XML, XSL transfroms por supuesto) y la mayoría de las páginas que tienen un módulo de comentarios. Bueno! entonces o bien copiar o pegar este código en todas las plantillas de página (que yo no tienen voz, pero que el mantenimiento y la modificación de un pesadilla) o mejor aún, crear un archivo de inclusión que puede ser tirado en donde quiera que usted lo desea en su página ( s) ...
Así que ¿cómo podemos crear un archivo XSL INCLUDE e incluirlo dentro de otro archivo XSL? Aquí es cómo ...

Sólo para dejar las cosas claras ... aquí está la lista rápida de los archivos que usted crea ... aquí, estaremos incluyendo información acerca de las frutas y verduras en una página principal llamada de los alimentos.

1. food.xml - archivo de datos XML en el que se aplica la transformación
2. food.xsl - principal archivo XSL que transformará nuestra food.xml
3. inc_fruits.xsl - XSL archivo de inclusión que se procesan los datos de las frutas
4. inc_vegtables.xsl - XSL archivo de inclusión que se procesan los datos vetetables

No creo que tengo que explicar mucho, los códigos de los elementos anteriores, se explica por sí mismo ...

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>

Descargar todos los archivos anteriores aquí (250 descargas)


2008 04 de abril 2008

Trabajar con atributos de nodo XML en XSLT

Si utiliza XML y XSL, a continuación, que podría haber llegado a través de un tiempo, cuando se tiene que jugar un poco con los atributos y valores de los nodos XML que XSL. Son un montón de sitios con información acerca de este largo aliento, pero no encontré fueron breves y precisos ... Esto no es una TUTORIAL XML / XSL, pero mi intento de poner en conjunto-una especie de lista de trucos ...

El XML de ejemplo que vamos a trabajar con este aspecto ...

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

Así que vamos a empezar a transformar nuestra por encima de XML con XSL

Ejemplo 1: Visualización de valor en un atributo seleccionado

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

Resultado HTML se verá así

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


Ejemplo 2: a través de bucle y la visualización de todos los nombres de atributos XML y sus valores

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

Resultado HTML se verá así


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


Descargar todos los archivos anteriores aquí (243 descargas)



Mire este espacio, voy a seguir actualizando este con los nuevos descubrimientos ...


NDK en casa | Expresando IT | Boca Expresando | Penmenship Expresando | Awe Expresando | expresarme