Subject: Re: [xsl] linkdiff template From: Joerg Heinicke <joerg.heinicke@xxxxxx> Date: Thu, 13 Jun 2002 07:03:15 +0200 |
A key in XSLT is always created for every XML-tree. So you don't need a document() in the key's use-attribute. With your declaration the key of the indexed links is always the value of the first a/@href in $previous.
<xsl:key name="links" match="a" use="@href"/>
<xsl:param name="previous"/>
<xsl:template match="a"> <xsl:variable name="href" select="@href"/> <xsl:for-each select="$previous"> <xsl:if test="not(key('links', $href))"> <xsl:value-of select="$href"/> </xsl:if> </xsl:for-each> </xsl:template>
Regards,
Joerg
Guy McArthur wrote:
Hi, I'm looking to write a template to output the a/@href's from one (newer) file that are *not* present in another (older) file.
I.e. given the following two files -old.xml- <html> <a href="http://www.google.com/>Google!</a> <a href="http://w3.org/">W3C</a> </html> -new.xml- <html> <a href="http://w3.org/">W3C</a> <a href="http://guymcarthur.com">My HomePage</a> <a href="http://xml.apache.org/xalan/">Xalan</a> </html> -- The output would be: http://guymcarthur.com http://xml.apache.org/xalan/
Here's my first stab at the stylesheet:
-linkdiff.xsl-
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="previous"/>
<xsl:key name="links" match="a" use="document($previous)///a/@href"/>
<xsl:output method="text"/>
<xsl:template match="a"> <xsl:if test="not(boolean(key('links', @href)))"> <xsl:value-of select="@href"/> </xsl:if> </xsl:template>
</xsl:stylesheet> --
However, it is just outputting all the href's (test is always true). Please enlighten me!
I'm using 'java org.apache.xalan.xslt.Process -IN new.xml -XSL \ linkdiff.xsl -PARAM previous old.xml'.
GKM
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] linkdiff template, Joerg Heinicke | Thread | Re: [xsl] linkdiff template, Guy McArthur |
Re: [xsl] linkdiff template, Joerg Heinicke | Date | RE: [xsl] node() as pattern, DPawson |
Month |