xsl-list
[Top] [All Lists]

RE: 1 XSL for 2 XML

2004-06-14 04:47:57
So, is it better to use
   <xsl:template match="f:MYTAB|MYTAB">
than
   <xsl:template match="*[local-name(.)='MYTAB']">

Probably the former.

But my preferred solution would be that if the input is in the "wrong"
namespace, you should first do a transformation that puts it in the correct
namespace, and your main transformation then doesn't have to deal with these
complexities. 

Michael Kay



??

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:f="urn:schemas-cp-com:gen">
<xsl:output method="html" version="4.0"/>
<xsl:template match="/">
<html><body>
<xsl:apply-templates select="//f:MYTAB|//MYTAB"/>
</body></html>
</xsl:template>

<xsl:template match="f:MYTAB|MYTAB">
<table border="1">
<th>HEAD</th><th>
<xsl:value-of select="MYHEAD"/><xsl:value-of select="f:MYHEAD"/></th>
<xsl:apply-templates select="f:MYITEM|MYITEM"/>
</table>
</xsl:template>

<xsl:template match="f:MYITEM|MYITEM">
<tr><td>ITEM</td>
<td><xsl:value-of select="MYIT"/><xsl:value-of 
select="f:MYIT"/></td></tr>
</xsl:template>
</xsl:stylesheet>


Selecting by local-name like this is not a very good idea, 
when all you are
trying to do is to avoid specifying a correct namespace 
prefix. Firstly,
it's selecting/matching elements that it shouldn't 
(elements in the wrong
namespace). 

Secondly, with Saxon at any rate, it makes the search for a matching
template rule very inefficient. Saxon organizes rules by 
the node-kind and
node-name of the nodes that are matched, and then looks for 
"generic" rules
that can match multiple node kinds or multiple node-names. 
If all the rules
are generic, as here, then it potentially tries to match 
each element
against every rule.

Michael Kay 

-----Original Message-----
From: Petr Mach3 [mailto:Mach3P(_at_)seznam(_dot_)cz] 
Sent: 03 June 2004 10:13
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] 1 XSL for 2 XML

Found answer, but ...
Is it possible to use     exclude-result-prefixes="f"  ????
It doesn't work for me.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:f="urn:schemas-cp-com:gen">
<xsl:output method="html" version="4.0"/>

<xsl:template match="/">
<html><body>
<xsl:apply-templates select="//*[local-name(.)='MYTAB']"/>
</body></html>
</xsl:template>

<xsl:template match="*[local-name(.)='MYTAB']">
<table border="1">
<th>HEAD</th>
<th><xsl:value-of select="MYHEAD"/><xsl:value-of 
select="f:MYHEAD"/></th>
<xsl:apply-templates select="*[local-name(.)='MYITEM']"/>
</table>
</xsl:template>

<xsl:template match="*[local-name(.)='MYITEM']">
<tr><td>ITEM</td>
<td><xsl:value-of select="MYIT"/><xsl:value-of 
select="f:MYIT"/></td></tr>
</xsl:template>
</xsl:stylesheet>

____________________________________________________________
Neomezený internet bez jakékoli smlouvy, kdykoli vás napadne. 
A navíc 30 volných minut na volání! S předplacenou službou Go 
Data Nonstop vše jen za 850 Kč měsíčně.
http://ad.seznam.cz/clickthru?spotId=75021

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