|
Subject: Re: [xsl] Comparing 2 XML Documents From: Ragulf Pickaxe <ragulf.pickaxe@xxxxxxxxx> Date: Wed, 9 Nov 2005 14:59:29 +0100 |
Hi Fraser,
On 11/9/05, Fraser Goffin <goffinf@xxxxxxxxxxx> wrote:
> Does anyone know a good way of comparing aspects of two XML instance
> documents using XSLT. The number of possible differences may be large so I
> would prefer not to have to create a hard coded test for each
Instead of explicitly testing for all possible occurences, I would
compare two documents in a different way.
I would create two variables:
<xsl:variable name="Doc1" select="/*"/>
<xsl:variable name="Doc2" select="document('foo.xml')/*"/>
Then go recursively through the elements first through $Doc1,
comparing this to $Doc2, then through $Doc2 comparing to $Doc1.
I have written a very scetchy (and unfinished) part of what I would
do, here. Perhaps you can use it, perhaps not.
<xsl:template match="/">
<xsl:apply-templates select="$Doc1" mode="Doc1-vs-Doc2"/>
<xsl:apply-templates select="$Doc1" mode="Doc2-vs-Doc1"/>
</xsl:template>
<xsl:template match="*" mode="Doc1-vs-Doc2">
<xsl:param name="doc2" select="$Doc2"/>
<xsl:choose>
<xsl:when test="local-name()!=local-name($doc2)">
<xsl:apply-templates select="@*" mode="Doc1-vs-Doc2">
<xsl:with-param name="doc2" select="$doc2"/>
</xsl:apply-templates>
<xsl:for-each select="*">
<xsl:variable name="pos" select="position()"/>
<xsl:apply-temlates select="." mode="Doc1-vs-Doc2">
<xsl:with-param name="doc2" select="$doc2/*[position()=$pos]"/>
</xsl:apply-templates>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<Mismatch Type="Doc1-vs-Doc2">
<NotExist><xsl:value-of select="local-name()"/></NotExist>
</Mismatch>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Regards,
Ragulf Pickaxe :-)
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Comparing 2 XML Documents, David Carlisle | Thread | [xsl] Mask * for translate function, Ferdinand Soethe |
| [xsl] Mask * for translate function, Ferdinand Soethe | Date | Re: [xsl] Mask * for translate func, David Carlisle |
| Month |