RE: [xsl] some problems with my first XSL :( [namespace in attributes]

Subject: RE: [xsl] some problems with my first XSL :( [namespace in attributes]
From: "Sam D. Chuparkoff" <sdc@xxxxxxxxxx>
Date: Thu, 21 Jul 2005 15:56:47 -0400
On Thu, 2005-07-21 at 18:17 +0200, Ana Yndurain wrote:
> OK! Thanks, it works!! I don't know how it could work before :S
> 
> BUT now I have other "little" problem. It works when I use the namespace m in <xsl:template match="m:xxxx" ...> with direct attributes, but not when I use Xpath inside.
> 
> For example, in next two templates "metricascomprobadas" & "listametricas" when I select @scope, or @description, it works fine. BUT when I try to count Values/Value, it doesn't work, or when I try to accede in 
> <xsl:for-each select="Values/Value">, it doesn't work.
> 
> I tried some options and any works. 
> 
> How have I to use de namespace inside a xsl:template??

George answered this question:

> Also you should change other references to elements from that
> namespace in XPath expressions if any to use the prefix.

I think what you're missing is that every element in your source
document is in the same namespace. So you should be specifying a
namespace for every element name in every xpath expression. In your
for-each mentioned above, you should use the expression:

  select="m:Values/m:Value"

sdc

> Here are my 2 templates
> 
> Thanks a lot!! You have made this day happier :D
> 
> Ana
> 
> ....
> 
> <xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; xmlns:m="http://metrics.sourceforge.net/2003/Metrics-First-Flat"; >
> 
> ....
> 
> <!-- PLANTILLA METRICASCOMPROBADAS -->
> <!-- Parte del nodo Metrics (en /) y muestra la lista de metricas comprobadas -->
> <xsl:template match="m:Metrics" mode="metricascomprobadas">
>   <h3>Metricas comprobadas en el proyecto <xsl:value-of select="translate(@scope,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/></h3>
>   <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
>     <tr>
>       <th>Metrica</th>
>       <th>Descripcion</th>
>       <th>Archivos con valores fuera de rango</th>
>     </tr>      
>     <xsl:for-each select="m:Metric">
>       <!-- <xsl:sort  select="count(Values/Value)" order="descending"/> -->
>       <tr>
>         <xsl:call-template name="alternated-row"></xsl:call-template>
>         <!-- Enlace al listado de valores de la metrica correspondiente -->
>         <td><a href="#f-{@id}"><xsl:value-of select="@id"/></a></td>
>         <td><xsl:value-of  select="@description"/></td>
>         <td><xsl:value-of  select="count(Values/Value)"/></td>
>       </tr>
>     </xsl:for-each>      
>   </table>
> </xsl:template>
> 
> <!-- PLANTILLA LISTAMETRICAS -->
> <xsl:template match="m:Metric" mode="listametricas">
>   <a name="f-{@id}"></a>
>   <h3>Metrica <xsl:value-of select="@id"/> (<xsl:value-of select="@description"/>)</h3>
>   <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
>     <tr>
>       <th>Archivo</th>
>       <th>Valor</th>
>     </tr>      
>     <xsl:for-each select="Values/Value">
>       <tr>
>         <xsl:call-template name="alternated-row"></xsl:call-template>
>         <td><xsl:value-of select="@package"/><xsl:value-of select="@source"/></td>
>         <td><xsl:value-of select="@value"/></td>
>       </tr>
>     </xsl:for-each>      
>     <xsl:for-each select="Value">
>       <tr>
>         <td>Total</td>
>         <td><xsl:value-of select="@value"/></td>
>       </tr>
>     </xsl:for-each>      
>   </table>    
>   <a href="#top">Back to top</a>
> </xsl:template>
> 
> -----Mensaje original-----
> De: George Cristian Bina [mailto:george@xxxxxxx] 
> Enviado el: jueves, 21 de julio de 2005 16:21
> Para: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Asunto: Re: [xsl] some problems with my first XSL :(
> 
> Dear Ana,
> 
> That looks like a complex task for the first XSL :).
> The problem is that you match on a Metrics element from no namespace
> 
> <xsl:template match="Metrics" mode="cabecera">
> 
> and your document contains a Metrics element from the 
> http://metrics.sourceforge.net/2003/Metrics-First-Flat namespace
> 
> <Metrics scope="p" type="Project" date="2005-07-20" 
> xmlns="http://metrics.sourceforge.net/2003/Metrics-First-Flat";>
> 
> You need something like 
> xmlns:m="http://metrics.sourceforge.net/2003/Metrics-First-Flat"; in your 
> stylesheet and then use
> 
> <xsl:template match="m:Metrics" mode="cabecera">
> 
> Also you should change other references to elements from that namespace 
> in XPath expressions if any to use the prefix.
> 
> Best Regards,
> George
> ---------------------------------------------------------------------
> George Cristian Bina
> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
> http://www.oxygenxml.com
> 
> 
> Ana Yndurain wrote:
> > Hi!
> > First, sorry about my english :S
> > 
> > Ibm trying to do my first XSL to show some data from a XML created by Metrics 1.3.5 
> > (a XML example of that XML and my XSL are at the end of the mail)
> > 
> > My problem is that it only show Metrics/Cycle/Package values, and that is the only thing that I donbt want!!! b9
> > 
> > Using oXygen program (debugger) I saw that the line <xsl:apply-templates mode="cabecera"/> doesnbt jump for that templateb& and I donbt know why.
> > 
> > The strange thing is that my XSL was working perfectly, and suddenly it stoped b9
> > 
> > Thanks for your help!!
> > Ana
> > 
> > Now in Spanish :D
> > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > Hola!
> > Estoy haciendo un XSL para mostrar unos resultados que tengo en un xml (creado por el Metrics1.3.5) (os pongo el codigo de los dos abajo)
> > 
> > Mi problema es que lo unico que me aparece es el contenido de Metrics/Cycle/Package, es decir, las xxx, que es justo lo C:nico que no quiero que salga :(
> > 
> > Me he fijado que cuando llega a esta lC-nea (uso el debugger del editor oXygen)
> >             <xsl:apply-templates mode="cabecera"/>
> > no salta a la plantilla cabecera, y no entiendo por que.
> > 
> > Alguien tiene alguna idea?? Lo curioso es que ayer me funcionaba, y quedaba un html bastante chulo.
> > Le cambiC) el xml con el que estaba haciendo las pruebas, y no volviC3 a funcionar :(
> > 
> > Os dejo debajo el formato del xml y el xsl que he creado.
> > Gracias!!
> > 
> > Ana
> > 
> > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > My XSL:
> > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > <?xml version="1.0" encoding="UTF-8"?>
> > 
> > <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> >   
> >   <!-- NODO RAIZ -->
> >   <xsl:template match="/">
> >     <html> 
> >       <!-- HOJA DE ESTILOS  -->
> >       <style type="text/css">
> >         .bannercell {
> >         border: 0px;
> >         padding: 0px;
> >         }
> >         body {
> >         margin-left: 10;
> >         margin-right: 10;
> >         font:normal 80% arial,helvetica,sanserif;
> >         background-color:#FFFFFF;
> >         color:#000000;
> >         }
> >         .a td { 
> >         background: #efefef;
> >         }
> >         .b td { 
> >         background: #fff;
> >         }
> >         th, td {
> >         text-align: left;
> >         vertical-align: top;
> >         }
> >         th {
> >         font-weight:bold;
> >         background: #ccc;
> >         color: black;
> >         }
> >         table, th, td {
> >         font-size:100%;
> >         border: none
> >         }
> >         table.log tr td, tr th {
> >         
> >         }
> >         h2 {
> >         font-weight:bold;
> >         font-size:140%;
> >         margin-bottom: 5;
> >         }
> >         h3 {
> >         font-size:100%;
> >         font-weight:bold;
> >         background: #525D76;
> >         color: white;
> >         text-decoration: none;
> >         padding: 5px;
> >         margin-right: 2px;
> >         margin-left: 2px;
> >         margin-bottom: 0;
> >         }
> >       </style>
> >       
> >       <head>
> >         <title>
> >               <!-- EJECUTA LA PLANTILLA CABECERA -->
> >           <xsl:apply-templates mode="cabecera"/>
> > 
> >         </title>
> >       </head>
> >       
> >       <body>  
> >         <a name="top"></a>
> >         
> >         <hr size="1" width="100%" align="left"/>    
> >         
> >         <!-- EJECUTA LA PLANTILLA METRICASCOMPROBADAS -->
> >         <xsl:apply-templates mode="metricascomprobadas"/>
> >         
> >         <hr size="1" width="100%" align="left"/>       
> >         
> >         <!-- EJECUTA LA PLANTILLA LISTAMETRICAS -->
> >         <xsl:apply-templates mode="listametricas"/>
> >         
> >       </body>
> >     </html>
> >   </xsl:template>
> >   
> >   
> >   <!-- PLANTILLA CABECERA -->
> >   <!-- Parte del nodo Metrics (en /) y muestra la cabecera con algunos datos -->
> >   <xsl:template match="Metrics" mode="cabecera">
> >     Metricas del proyecto: <xsl:value-of select="@scope"/>
> >   </xsl:template>
> >   
> >   
> >   <!-- PLANTILLA METRICASCOMPROBADAS -->
> >   <!-- Parte del nodo Metrics (en /) y muestra la lista de metricas comprobadas -->
> >   <xsl:template match="Metrics" mode="metricascomprobadas">
> >     <h3>Metricas comprobadas en el proyecto <xsl:value-of select="translate(@scope,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/></h3>
> >     <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
> >       <tr>
> >         <th>Metrica</th>
> >         <th>Descripcion</th>
> >         <th>Archivos con valores fuera de rango</th>
> >       </tr>      
> >       <xsl:for-each select="Metric">
> >         <xsl:sort  select="count(Values/Value[@inrange='false'])" order="descending"/>
> >         <tr>
> >           <xsl:call-template name="alternated-row"></xsl:call-template>
> >           <!-- Enlace al listado de valores de la metrica correspondiente -->
> >           <td><a href="#f-{@id}"><xsl:value-of select="@id"/></a></td>
> >           <td><xsl:value-of select="@description"/></td>
> >           <td><xsl:value-of select="count(Values/Value[@inrange='false'])"/></td>
> >         </tr>
> >       </xsl:for-each>
> >       
> >     </table>
> >   </xsl:template>
> >   
> >   <!-- PLANTILLA LISTAMETRICAS -->
> >   <xsl:template match="Metric" mode="listametricas">
> >     <a name="f-{@id}"></a>
> >     <h3>Metrica <xsl:value-of select="@id"/> (<xsl:value-of select="@description"/>)</h3>
> >     <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
> >       <tr>
> >         <th>Archivo</th>
> >         <th>Valor</th>
> >       </tr>
> >       
> >       <xsl:for-each select="Values/Value[@inrange='false']">
> >         <tr>
> >           <xsl:call-template name="alternated-row"></xsl:call-template>
> >           <td><xsl:value-of select="@package"/><xsl:value-of select="@source"/></td>
> >           <td><xsl:value-of select="@value"/></td>
> >         </tr>
> >       </xsl:for-each>
> >       
> >       <xsl:for-each select="Value">
> >         <tr>
> >           <td>Total</td>
> >           <td><xsl:value-of select="@value"/></td>
> >         </tr>
> >       </xsl:for-each>
> >       
> >     </table>    
> >     <a href="#top">Back to top</a>
> >   </xsl:template>
> >   
> >   <!-- PLANTILLA QUE PONE CADA FILA DE LA TABLA DE UN COLOR -->
> >   <xsl:template name="alternated-row">
> >     <xsl:attribute name="class">
> >       <xsl:if test="position() mod 2 = 1">a</xsl:if>
> >       <xsl:if test="position() mod 2 = 0">b</xsl:if>
> >     </xsl:attribute>
> >   </xsl:template>  
> >   
> > </xsl:stylesheet>
> > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > My XML 
> > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > <?xml version="1.0" encoding="UTF-8"?>
> > <Metrics scope="p" type="Project" date="2005-07-20" xmlns="http://metrics.sourceforge.net/2003/Metrics-First-Flat";>
> >    <Cycle name="es.m.p.bu.vo et al" nodes="4" diameter="3">
> >       <Package>es.m.p.bu.vo</Package>
> >       <Package>es.m.p.ws</Package>
> >       <Package>es.m.p.bu.ma</Package>
> >       <Package>es.m.p.bu.ex</Package>
> >    </Cycle>
> >    <Cycle name="es.pr.m.p.ma et al" nodes="3" diameter="2">
> >       <Package>es.m.p.ma</Package>
> >       <Package>es.m.p.ma.tr</Package>
> >       <Package>es.m.p.ma.psp</Package>
> >    </Cycle>
> >    <Metric id = "NSM" description ="Number of Static Methods">
> >       <Values per = "type" total = "20" avg = "0,278" stddev = "0,961" max = "7">
> >          <Value name="aa" source ="a.java" package ="es.m.p.bu.dao" value ="0"/>
> >          <Value name="bb" source ="b.java" package ="es.m.p.ma.psp" value ="0"/>
> >          <Value name="cc" source ="c.java" package ="es.m.p.ma.tr" value ="0"/>
> >          <Value name="dd" source ="d.java" package ="es.m.p.ma.tr" value ="0"/>
> >       </Values>
> >    </Metric>
> >    <Metric id = "TLOC" description ="Total Lines of Code" max ="-1">
> >       <Value value="5039"/>
> >    </Metric>
> >    <Metric id = "CA" description ="Afferent Coupling" max ="50">
> >       <Values per = "packageFragment" avg = "3,87" stddev = "7,165" max = "34">
> >          <Value name="es.m.p.bu.vo" package ="es.m.p.bu.vo" value ="34"/>
> >          <Value name="es.m.p.bu.ex" package ="es.m.p.bu.ex" value ="10"/>
> >          <Value name="es.m.p.bu.dao" package ="es.m.p.bu.dao" value ="0"/>
> >          <Value name="es.m.p.ma.psp" package ="es.m.p.ma.psp" value ="0"/>
> >          <Value name="es.m.p.ma.tr" package ="es.m.p.ma.tr" value ="0"/>
> >       </Values>
> >    </Metric>
> >    <Metric id = "RMD" description ="Normalized Distance" max ="0,1">
> >       <Values per = "packageFragment" avg = "0,337" stddev = "0,299" max = "0,85" maxinrange="false">
> >          <Value name="es.m.p.bu.vo" package ="es.m.p.bu.vo" value ="0,85" inrange="false"/>
> >          <Value name="es.m.p.ws" package ="es.m.p.ws" value ="0,833" inrange="false"/>
> >          <Value name="es.m.p.bu.vo" package ="es.m.p.bu.vo" value ="0,727" inrange="false"/>
> >          <Value name="es.m.p.ma.tr" package ="es.m.p.ma.tr" value ="0"/>
> >       </Values>
> >    </Metric>
> >    <Metric id = "NOC" description ="Number of Classes" max ="-1">
> >       <Values per = "packageFragment" total = "72" avg = "3,13" stddev = "2,173" max = "10" maxinrange="false">
> >          <Value name="es.m.p.bu.ex" package ="es.m.p.bu.ex" value ="10" inrange="false"/>
> >          <Value name="es.m.p.bu.vo" package ="es.m.p.bu.vo" value ="6" inrange="false"/>
> >          <Value name="es.m.p.ws" package ="es.m.p.ws" value ="6" inrange="false"/>
> >          <Value name="es.m.p.ma.psp" package ="es.m.p.ma.psp" value ="1" inrange="false"/>
> >       </Values>
> >    </Metric>
> >    <Metric id = "SIX" description ="Specialization Index" max ="-1">
> >       <Values per = "type" avg = "0,204" stddev = "0,587" max = "3" maxinrange="false">
> >          <Value name="qq" source ="q.java" package ="es.m.p.web.action" value ="3" inrange="false"/>
> >          <Value name="ww" source ="w.java" package ="es.m.p.web.action" value ="3" inrange="false"/>
> >          <Value name="ee" source ="e.java" package ="es.m.p.bu.dao" value ="1,5" inrange="false"/>
> >          <Value name="rr" source ="r.java" package ="es.m.p.ma.tr" value ="0" inrange="false"/>
> >       </Values>
> >    </Metric>
> >    <Metric id = "RMI" description ="Instability" max ="0,3">
> >       <Values per = "packageFragment" avg = "0,693" stddev = "0,316" max = "1" maxinrange="false">
> >          <Value name="es.m.p.bu.ma.report" package ="es.m.p.bu.ma.report" value ="1" inrange="false"/>
> >          <Value name="es.m.p.web.action" package ="es.m.p.web.action" value ="1" inrange="false"/>
> >          <Value name="es.m.p.ws" package ="es.m.p.ws" value ="0,167"/>
> >          <Value name="es.m.p.bu.vo" package ="es.m.p.bu.vo" value ="0,15"/>
> >       </Values>
> >    </Metric>
> > </Metrics>
> > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Current Thread