xsl-list
[Top] [All Lists]

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

2005-07-21 12:56:47
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-{(_at_)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-{(_at_)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(_at_)sync(_dot_)ro] 
Enviado el: jueves, 21 de julio de 2005 16:21
Para: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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

I’m 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 don’t want!!! ☹

Using oXygen program (debugger) I saw that the line <xsl:apply-templates 
mode="cabecera"/> doesn’t jump for that template… and I don’t know why.

The strange thing is that my XSL was working perfectly, and suddenly it 
stoped ☹

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 único que no 
quiero que salga :(

Me he fijado que cuando llega a esta lí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 cambié el xml con el que estaba haciendo las pruebas, y no volvió 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[(_at_)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-{(_at_)id}"><xsl:value-of select="@id"/></a></td>
          <td><xsl:value-of select="@description"/></td>
          <td><xsl:value-of 
select="count(Values/Value[(_at_)inrange='false'])"/></td>
        </tr>
      </xsl:for-each>
      
    </table>
  </xsl:template>
  
  <!-- PLANTILLA LISTAMETRICAS -->
  <xsl:template match="Metric" mode="listametricas">
    <a name="f-{(_at_)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[(_at_)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>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>
  • RE: some problems with my first XSL :( [namespace in attributes], Sam D. Chuparkoff <=