elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Problema al cojer los hijos de un nodo :S (Xpath, XSLT)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al cojer los hijos de un nodo :S (Xpath, XSLT)  (Leído 2,067 veces)
xustyx

Desconectado Desconectado

Mensajes: 213


Ver Perfil
Problema al cojer los hijos de un nodo :S (Xpath, XSLT)
« en: 28 Mayo 2013, 00:13 am »

Buenas a todos pues os comento, llevo rato comiendome la cabeza y no encuentro ninguna solucion que sirva, el problema es el siguiente:

Con C# hago una select que la guardo en un dataset, este dataset lo transformo a xml y luego a este xml le aplico un XSLT.

El problema viene en que por ejemplo si me devuelve dos rows o mas al seleccionar las columnas, en vez de generarlas bien me mete todas en una... un problema del for-each y de que no se como realizar bien la sentencia XPATH puede ser.

Como de antemano no puedo saber las columnas ni el nombre de estas no puedo especificar bien, si no ya lo tendria hecho xD. Weno pa que entendais mejor os paso el codigo.

el XML
Código
  1. <NewDataSet>
  2.      <Table diffgr:id="Table1" msdata:rowOrder="0">
  3.        <CODI>1</CODI>
  4.        <CODIPROVEIDOR>P01</CODIPROVEIDOR>
  5.        <DATA>2012-12-12T00:00:00+01:00</DATA>
  6.        <CODICOMANDA>1</CODICOMANDA>
  7.        <CODIARTICLE>A01</CODIARTICLE>
  8.        <QUANTITAT>12</QUANTITAT>
  9.        <PREU>5</PREU>
  10.        <REBUT>false</REBUT>
  11.      </Table>
  12.      <Table diffgr:id="Table2" msdata:rowOrder="1">
  13.        <CODI>3</CODI>
  14.        <CODIPROVEIDOR>P01</CODIPROVEIDOR>
  15.        <DATA>2013-05-27T00:00:00+02:00</DATA>
  16.        <CODICOMANDA>3</CODICOMANDA>
  17.        <CODIARTICLE>A02</CODIARTICLE>
  18.        <QUANTITAT>10</QUANTITAT>
  19.        <PREU>5</PREU>
  20.        <REBUT>false</REBUT>
  21.      </Table>
  22.    </NewDataSet>
  23.  

Como podeis ver existenten dos rows las dos table, que se muestran, i cada table tiene 8 columnas, bueno al pasarle el XLST el resultado es que me mete por cada row 16 columnas, ja que no se como especificar en el for-each por cada hijo de table (thiiiiiiiis) no por cada hijo de todos los nodo tables que es lo que me hace.

Aqui el XSLT
Código
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:template match="/">
  4.  <html>
  5.  <body>
  6.   <xsl:choose>
  7.  <xsl:when test="not(//NewDataSet)">
  8.  <h1><center>El proveidor no existeix o no te cap comanda.</center></h1>
  9.  </xsl:when>
  10.  <xsl:otherwise>
  11. <h1><center>Llistat d'articles pendents del proveidor: <xsl:value-of select="//NewDataSet/Table/CODIPROVEIDOR/." /></center></h1>
  12. <table>
  13. <tr>
  14. <xsl:for-each select="//NewDataSet/Table[@* = 'Table1']/*" >
  15. <th><xsl:value-of select="name(.)" /></th>
  16. </xsl:for-each>
  17. </tr>
  18. <xsl:for-each select="//NewDataSet/Table">
  19. <tr>
  20. <xsl:for-each select="//NewDataSet/Table/*">
  21. <td><xsl:value-of select="." /></td>
  22. </xsl:for-each>
  23. </tr>
  24. </xsl:for-each>
  25. </table>
  26.  </xsl:otherwise>
  27. </xsl:choose>
  28.  </body>
  29.  </html>
  30. </xsl:template>
  31. </xsl:stylesheet>
  32.  

Bueno aun ni he posteado pero le dao un ultimo intento a mi imaginacion y a resultado efectivo  (La heiniken ma echo pensar en verde XDDDD).

Este es el XSLT que he usado y a rulado.

Código
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:template match="/">
  4.  <html>
  5.  <body>
  6.   <xsl:choose>
  7.  <xsl:when test="not(//NewDataSet)">
  8.  <h1><center>El proveidor no existeix o no te cap comanda.</center></h1>
  9.  </xsl:when>
  10.  <xsl:otherwise>
  11. <h1><center>Llistat d'articles pendents del proveidor: <xsl:value-of select="//NewDataSet/Table/CODIPROVEIDOR/." /></center></h1>
  12. <table>
  13. <tr>
  14. <xsl:for-each select="//NewDataSet/Table[@* = 'Table1']/*" >
  15. <th><xsl:value-of select="name(.)" /></th>
  16. </xsl:for-each>
  17. </tr>
  18. <xsl:for-each select="//NewDataSet/Table">
  19. <tr>
  20. <xsl:for-each select="child::*">
  21. <td><xsl:value-of select="." /></td>
  22. </xsl:for-each>
  23. </tr>
  24. </xsl:for-each>
  25. </table>
  26.  </xsl:otherwise>
  27. </xsl:choose>
  28.  </body>
  29.  </html>
  30. </xsl:template>
  31. </xsl:stylesheet>
  32.  

Bueno excepto el titulo del principio lo que en realidad queria era conseguir mediante un xslt un metodo general para poder pasar a html (tabla) todas las selects que metiese en un dataset.

Saludos :)


« Última modificación: 28 Mayo 2013, 00:16 am por xustyx » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO] como saber cuando un nodo de un treeview es nodo hoja
.NET (C#, VB.NET, ASP)
matiasGuacharaca 5 14,366 Último mensaje 19 Junio 2009, 01:32 am
por matiasGuacharaca
¿alguien sabe algo sobre xslt?
Programación General
misforos 0 2,192 Último mensaje 8 Junio 2010, 01:48 am
por misforos
qué pasó con XSL,XQL,XLL,XPATH, se siguen utilizando?
Desarrollo Web
jhonatanAsm 2 3,578 Último mensaje 15 Junio 2016, 19:03 pm
por jhonatanAsm
DOMDocument & XPath
PHP
Og. 0 1,552 Último mensaje 31 Marzo 2012, 11:05 am
por Og.
Instalar o usar XPATH en Ruby
Scripting
daniel.r.23 0 1,944 Último mensaje 6 Abril 2013, 16:27 pm
por daniel.r.23
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines