Subject: Re: [xsl] Wildcard problem From: Ragulf Pickaxe <ragulf.pickaxe@xxxxxxxxx> Date: Thu, 6 Oct 2005 13:37:39 +0200 |
Hi again Houman, > I don't get an error with your code. However I get a count of 10 when I > should have gotten 2. > > <WAAUX03MeterPulse action="add"> > <WAAUX03WithholdNumber action="add"> > <WAAUX01MeterPulse action="add"> > <WAAUX01Bar141 action="add"> > <WAAUX01CallBarring action="add"> > <WAAUX01Line action="add"> > <WAAUX03ICB action="add"> > <WAAUX01OCBE action="add"> > <WAAUX03OCB action="add"> > <WAAUX03Line action="add"> > > It still counts everything with WAAUX following two digits, which are > 10. This goes for both David's and my solution. They cound _unique_ names beginning with WAAUX having two digits right after. ... > > As I said, I am very new to muenchian grouping. However could it be that > this is wrong: > > <xsl:key name="WAAUX" match="*[starts-with(name(),'WAAUX')]" > use="name()"/> > > Because not each element that starts with WAAUX needs a unique index. > But each element that starts with WAAUX AND a two number digits needs a > unique index, right? But how is this possible? The Translate won't help > in this situation. Unless the problem is somewhere else... > > Many thanks > Houman > > > > However the translate() funcation eliminates this differences. > > Is that possible or too complicated for XSLT? > > You just need to do the de-duplication before the translate. > eg using keys (muenchian grouping) > > <xsl:key name="WAAUX" match="*[starts-with(name(),'WAAUX')]" > use="name()"/> > > > <xsl:value-of select="count(* > [generate-id()=generate-id(key('WAAUX',name())[1])] > [starts-with(translate(name(),'123456789','000000000'),'WAAUX00')])"/> I think you can change this to: <xsl:key name="WAAUX" match="*[starts-with(name(),'WAAUX')]" use="substring(name(),1,7)"/> <xsl:value-of select="count(*[generate-id()=generate-id(key('WAAUX',substring(name(),1,7))[ 1])][starts-with(translate(name(),'123456789','000000000'),'WAAUX00')])"/> That is, the solution should now distinguish only on those first 7 characters in the element name. In my solution, you should change the predicate: [not(name()=preceding::*/name())] to [not(substring(name(),1,7)=preceding::*/substring(name(),1,7))] Regards, Ragulf Pickaxe :-)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Wildcard problem, Khorasani, Houman | Thread | Re: [xsl] Wildcard problem, David Carlisle |
Re: [xsl] Wildcard problem, David Carlisle | Date | Re: [xsl] Wildcard problem, David Carlisle |
Month |