Re: [xsl] Testing 2 XML documents for equality - a solution

Subject: Re: [xsl] Testing 2 XML documents for equality - a solution
From: David Carlisle <davidc@xxxxxxxxx>
Date: Wed, 30 Mar 2005 21:51:19 +0100
      <xsl:for-each select="$doc1//@*">
        <xsl:sort select="name()" />
        <xsl:value-of select="name()" />:<xsl:value-of
    select="." />:<xsl:value-of select="name(..)"
      />:<xsl:value-of
     select="count(../ancestor-or-self::node())" /> 
      </xsl:for-each>

No.  You can't use //@* for this at all.
You have to do normalise the attributes for each element separately, ie
inline the string from each attribute along with the string for each
element.
<x>
 <y a="2"/>
 <y/>
</x>
is equal to
<x>
 <y/>
 <y a="2"/>
</x>

by the above as you only reecord that the a attribute is on a level 2 y
element, you don't record which element it is on.

What is your definition of equality that you are trying to implement?
This definition (even if corrected) is not namespace aware so
<x:foo xmlns:x="a"/> would be different from <y:foo xmlns:y="a"/>
but equal to <x:foo xmlns:x="b"/>
so the definition of equality wouldn't be much use for any XPath use,
two "equal" inputs would behave diffently as input to a stylesheet.

David

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

Current Thread