|
Subject: RE: [xsl] Extracting a list of unique base urls from anchors in a html docu ment. From: Taras Tielkes <taras@xxxxxxx> Date: Fri, 14 Sep 2001 13:53:46 +0200 |
Hi David,
I adopted your earlier suggestion, and used a map:
<xsl:key name="local-links" match="a[contains(@href, '#') and
not(contains(@href, '/'))]" use="substring-before(@href,'#')"/>
The code that uses this map to extract information looks like:
Unique base-urls:
<xsl:for-each select="//a[generate-id() = generate-id(key('local-links',
substring-before(@href, '#'))[1])]">
href base: <xsl:value-of select="substring-before(@href, '#')"/>
occurances: <xsl:value-of select="count(key('local-links',
substring-before(@href, '#')))"/>
</xsl:for-each>
Can the code above be written in a more efficient way? I guess there isn't a
way to directly iterate over the keys in a map created by <xsl:key>?
By main question, however, is this: how can I aggregate this table of data
into an aggregated one, where every base url part maps to a count of
occurances of this base url part in the source document?
Thanks,
// tt
> -----Original Message-----
> From: David Carlisle [mailto:davidc@xxxxxxxxx]
> Sent: Thursday, September 13, 2001 8:06 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Extracting a list of unique base urls from
> anchors in
> a html docu ment.
>
>
>
> > I'm propably wrong,
>
> I'm afraid so:-)
>
> > The only difference is that my template doesn't compare the
> attribute values
> > as-is, but applies a substring before doing so.
>
> No the string function completely changes the sematics of =.
>
> If you have an XPath test of the form
>
> (node-set a) = (node-set b)
>
> then it is true if _any_ node in set a has a value equal to
> any node in
> set b.
>
> That's what you have here:
>
> @country=preceding-sibling::city/@country
>
> @country and preceding-sibling::city/@country
> both select node sets.
>
> If you have
>
> (string a) = (string b)
>
> then this is true if the string a equals to the string b.
>
> that's what you have here:
>
> substring-before(@href,'#')=substring-before(preceding::a/@href,'#')
>
> as substring-before always returns a string.
>
> substring-before requires a string as its first argument and
> if you give
> it a node set (as here) then it takes the string value of the
> first node
> (in document order) of the node set.
>
> @href has at most one node but preceding::a/@href has perhaps
> many node but
> whatever the current node the first node in that collection
> is the first
> href attribute on an a element that occurs in the document.
>
> David
>
> _____________________________________________________________________
> This message has been checked for all known viruses by Star Internet
> delivered through the MessageLabs Virus Scanning Service. For further
> information visit http://www.star.net.uk/stats.asp or
> alternatively call
> Star Internet for details on the Virus Scanning Service.
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] Extracting a list of uniq, Michael Kay | Thread | [xsl] substring manipulation to wra, Wilcox, Paul |
| [xsl] Using an XSLT value as a HTML, J.Brown (Ender/Amigo | Date | [no subject], Dmitri Ilyin |
| Month |