[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: XPATH: get not repeated nodes
<xsl:key name="x" match="VEH" use="concat(../../@cod,'+',@tap)"/> <xsl:param name="this" select="'1CA8ADH7P5..A0'"/> Thanks, David!!! I was thinking to fill de 'selects' only with xpath and javascript, something like this: function cargarASalon(xPath) { limpia(form1.cmbASalon); insertOpt(form1.cmbASalon, "Seleccione", "0"); var oASalon = oDatos.selectNodes(xPath); for(var j=0; oASalon.length > j; j++) { insertOpt(form1.cmbASalon, oASalon.item(j).getAttribute("as"), oASalon.item(j).getAttribute("as")); } } But now I am tried with xsl, i suppose that only with xpath maybe it will be impossible. Well, now i have another problem. I add a new node <PARAMS> in the xml that I can create before the transformation (I do not know how to pass params to the xsl) <PARAMS> <V14>1CA8ADH7P5..A0</V14> <AS>30</AS> <COL>0</COL> <TAP>0</TAP> </PARAMS> I have created the next 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="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:key name="a" match="V16" use="concat(../@cod,'+',@as)"/> <xsl:key name="c" match="VEH" use="concat(../../@cod,'+',../@as,'+',@codcol)"/> <xsl:key name="t" match="VEH" use="concat(../../@cod,'+',@tap)"/> <xsl:param name="v14" select="//PARAMS/V14"/> <xsl:param name="as" select="//PARAMS/AS"/> <xsl:param name="color" select="/PARAMS/COL"/> <xsl:template match="/DATOS"> <select name="cmbV14"> <option value="0">Seleccione</option> <xsl:for-each select="//V14"> <OPTION> <xsl:if test="@cod=$v14"><xsl:attribute name="selected"/></xsl:if> <xsl:attribute name="value"><xsl:value-of select="@cod"/></xsl:attribute> <xsl:value-of select="@lit"/> </OPTION> </xsl:for-each> </select> <select name="cmbASalon"> <option value="0">Seleccione</option> <xsl:for-each select="//V14[@cod=$v14]/V16[generate-id()=generate-id(key('a',concat($v14,'+',@as))[1])]"> <OPTION> <xsl:if test="@as=$as"><xsl:attribute name="selected"/></xsl:if> <xsl:attribute name="value"><xsl:value-of select="@as"/></xsl:attribute> <xsl:value-of select="@as"/> </OPTION> </xsl:for-each> </select> <xsl:if test="$as='0'"> <select name="cmbCol"> <option value="0">Seleccione</option> <xsl:for-each select="//V14[@cod=$v14]/V16/VEH[generate-id()=generate-id(key('c',concat($v14,'+',@as,'+',@codcol))[1])]"> <OPTION> <xsl:variable name="codcolor" select="@codcol"/> <xsl:if test="@codcol=$color"><xsl:attribute name="selected"/></xsl:if> <xsl:attribute name="value"><xsl:value-of select="@codcol"/></xsl:attribute> <xsl:value-of select="//COLORES/COL[@cod=$codcolor]/@lit"/> </OPTION> </xsl:for-each> </select> </xsl:if> <xsl:if test="$as!='0'"> <select name="cmbCol"> <option value="0">Seleccione</option> <xsl:for-each select="//V14[@cod=$v14]/V16/VEH[generate-id()=generate-id(key('c',concat($v14,'+',$as,'+',@codcol))[1])]"> <OPTION> <xsl:variable name="codcolor" select="@codcol"/> <xsl:if test="@codcol=$color"><xsl:attribute name="selected"/></xsl:if> <xsl:attribute name="value"><xsl:value-of select="@codcol"/></xsl:attribute> <xsl:value-of select="//COLORES/COL[@cod=$codcolor]/@lit"/> </OPTION> </xsl:for-each> </select> </xsl:if> <select name="cmbTap"> <option value="0">Seleccione</option> <xsl:for-each select="//V14[@cod=$v14]/V16/VEH[generate-id()=generate-id(key('t',concat($v14,'+',@tap))[1])]"> <OPTION> <xsl:attribute name="value"><xsl:value-of select="@tap"/></xsl:attribute> <xsl:value-of select="@tap"/> </OPTION> </xsl:for-each> </select> </xsl:template> </xsl:stylesheet> You can see the <xsl:if>..</xsl:if>, with that I try to change generte-id(key(...)) -- this to use all 'as' <xsl:for-each select="//V14[@cod=$v14]/V16/VEH[generate-id()=generate-id(key('c',concat($v14,'+',@as,'+',@codcol))[1])]"> -- this to use only the 'as' which comes with 'params' <xsl:for-each select="//V14[@cod=$v14]/V16/VEH[generate-id()=generate-id(key('c',concat($v14,'+',$as,'+',@codcol))[1])]"> The idea is that the comboBoxes are linked, now i'm trying with 'colores' (i have the literals), but the idea is: v14 -> as -> color -> tap, when i select one, the others must be to change with the good values. (well, i know it, repeat myself, i told it yesterday) It exists some wildcard to replace part of the key? It is necesary to repeat all the code? When I'll do the same thing with 'tap' i'll have several possible options (with 'as', without 'as', with 'color', without 'color'), how could I do to don't repeat the same code? or how use a variable with the good value or a wildcard? or cut the key? ... Thank you for everything!!! PD: Congratulations for the baby!!! _________________________________________________________________ Reparaciones, servicios a domicilio, empresas, profesionales... Todo en la guía telefónica de QDQ. http://qdq.msn.es/msn.cfm XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|