cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Geert Josten <Geert.Jos...@daidalos.nl>
Subject Re: multiple xpaths
Date Tue, 04 Oct 2005 21:05:37 GMT
If you have a working version of your XSL, send me a copy. I might find a moment to look for
some 
speed improvements..

Cheers,
Geert

David wrote:

> Its a very interesting way of doing it but I am worried about speed. I 
> had an idea VERY similar to it but am worried about speed. Yours would 
> probably be faster than what i was thinking. I will consider this as an 
> possible solution. Even if it isn't the best solution I could always do 
> this for now and then rewrite it to use <xsl:next-match/> when xalan 
> supports it.(I am pretty currently doesn't but it might...)
> 
> I do not know much about STX but I am sure it can be used to solve the 
> problem -- and it would be faster. The only issue I have with that 
> solution is that I am pretty sure its 'xpaths' (stxpaths) are a dumbed 
> down version of xpaths that do not have stuff like preceeding-sibilings.
> 
> David
> 
> 
> Geert Josten wrote:
> 
>> David,
>>
>> Fidling around a bit brought me to the XSL you will find below. Some 
>> notes though.
>>
>> Particularly the part that multiple values have to be added to the 
>> same attribute makes it quite difficult. I have for convenience chosen 
>> to add separate class elements to the img content. You could merge 
>> these to a class attribute with a separate transform.
>>
>> I am very sure this stylesheet can be optimized a lot. It now has to 
>> iterate through as many modes as there are xpaths + 2, which is not 
>> good for performance. This could be optimizes if more knowledge is 
>> added to the xpaths.xml. For instance by clustering less and more 
>> exact matches into a group and converting the matches in this group to 
>> a choose construct inside a template.
>>
>> I hope this XSL gives you a jump start or can give you some 
>> inspiration for futher problems..
>>
>> By the way, I saw your cross post on the dev list and am curious to 
>> the STX solution as well.
>>
>> Cheers,
>> Geert
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>>
>> <!-- $Id$ -->
>>
>> <xsl:stylesheet version="1.0"
>>     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>>     xmlns:myxsl="http://www.w3.org/1999/XSL/TransformAlias"
>>
>>     xmlns:xpaths="xpaths"
>>     xmlns:xhtml="xhtml"
>>  >
>>
>> <!--+ ==============================================================
>>     | output
>>     +-->
>>
>>   <xsl:namespace-alias stylesheet-prefix="myxsl" result-prefix="xsl"/>
>>
>>   <xsl:output method="xml"
>>     version="1.0" encoding="utf-8" indent="yes" />
>>
>> <!--+ ==============================================================
>>     | default templates
>>     +-->
>>
>>   <xsl:template match="@*|node()">
>>     <xsl:copy>
>>       <xsl:apply-templates select="@*|node()" />
>>     </xsl:copy>
>>   </xsl:template>
>>
>>   <xsl:template match="*">
>>     <xsl:element name="{name()}">
>>       <xsl:apply-templates select="@*|node()" />
>>     </xsl:element>
>>   </xsl:template>
>>
>>   <xsl:template match="xpaths:*">
>>     <xsl:message terminate="yes">
>>       Unknown or incorrect template instruction <xsl:value-of 
>> select="name()" /> within context <xsl:value-of 
>> select="name(parent::*)"/>
>>     </xsl:message>
>>   </xsl:template>
>>
>> <!--+ ==============================================================
>>     | root template
>>     +-->
>>
>>   <xsl:template match="/">
>>     <xsl:apply-templates select="xpaths:xpaths" />
>>   </xsl:template>
>>
>>   <xsl:template match="xpaths:xpaths">
>>     <myxsl:stylesheet version="1.0">
>>
>>       <xsl:for-each select="namespace::*[not(name() = 'xpaths')]">
>>         <xsl:copy />
>>       </xsl:for-each>
>>
>>       <myxsl:output method="xml"
>>         version="1.0" encoding="utf-8" indent="yes" />
>>
>>       <myxsl:template match="/|@*|node()">
>>         <myxsl:copy>
>>           <myxsl:apply-templates select="." mode="xpath1"/>
>>         </myxsl:copy>
>>       </myxsl:template>
>>
>>       <xsl:apply-templates select="xpaths:xpath" />
>>
>>       <myxsl:template match="/|@*|node()" 
>> mode="xpath{count(xpaths:xpath) + 1}">
>>         <myxsl:apply-templates select="@*|node()" />
>>       </myxsl:template>
>>     </myxsl:stylesheet>
>>   </xsl:template>
>>
>>   <xsl:template match="xpaths:xpath">
>>     <!-- default copying -->
>>     <myxsl:template match="/|@*|node()" mode="xpath{position()}">
>>       <myxsl:apply-templates select="." mode="xpath{position() + 1}"/>
>>     </myxsl:template>
>>
>>     <!-- special case -->
>>     <myxsl:template match="{@match}" mode="xpath{position()}">
>>       <xsl:apply-templates select="node()" />
>>       <myxsl:apply-templates select="." mode="xpath{position() + 1}"/>
>>     </myxsl:template>
>>   </xsl:template>
>>
>>   <xsl:template match="xpaths:literal">
>>     <xsl:apply-templates select="node()" />
>>   </xsl:template>
>>
>> </xsl:stylesheet>
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
> For additional commands, e-mail: users-help@cocoon.apache.org
> 
> 

-- 
Drs. G.P.H. Josten
Consultant



Daidalos BV
Source of Innovation
Hoekeindsehof 1-4
2665  JZ  Bleiswijk
Tel: +31 (0) 10 850 1200
Fax: +31 (0) 10 850 1199
www.daidalos.nl


De informatie - verzonden in of met dit emailbericht - is afkomstig van Daidalos BV en is

uitsluitend bestemd voor de geadresseerde. Indien u dit bericht onbedoeld hebt ontvangen,
verzoeken 
wij u het te verwijderen. Aan dit bericht kunnen geen rechten worden ontleend.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message