Subject: Re: [xsl] How to compare the attributes of two elements to ensure that they are equal From: Mukul Gandhi <mukulgw3@xxxxxxxxx> Date: Tue, 28 Oct 2003 20:40:25 -0800 (PST) |
Hi Arvind, I tried to construct the XML, similar to the problem description you have given. The XML, to which I applied the XSL is -- <?xml version="1.0" encoding="UTF-8"?> <root> <a id="1">one</a> <b id="2">two</b> <c id="1">three</c> <d id="4">four</d> <e id="5">five</e> </root> The XSL I have written is -- <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan"> <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/root"> <root> <xsl:variable name="temp-RTF"> <xsl:for-each select="*"> <xsl:if test="name(.)= 'a' "> <a> <xsl:for-each select="@*"> <att> <name> <xsl:value-of select="name(.)"/> </name> <value> <xsl:value-of select="."/> </value> </att> </xsl:for-each> </a> </xsl:if> <xsl:if test="name(.)= 'c' "> <c> <xsl:for-each select="@*"> <att> <name> <xsl:value-of select="name(.)"/> </name> <value> <xsl:value-of select="."/> </value> </att> </xsl:for-each> </c> </xsl:if> </xsl:for-each> </xsl:variable> <xsl:variable name= "a" select="xalan:nodeset($temp-RTF)/a/*" /> <xsl:variable name="c" select="xalan:nodeset($temp-RTF)/c/*" /> <xsl:if test="$a = $c"> Nodes 'a' and 'c' are equal (in terms of attributes) </xsl:if> <xsl:if test="not($a = $c)"> Nodes 'a' and 'c' are not equal (in terms of attributes) </xsl:if> </root> </xsl:template> </xsl:stylesheet> The above XSL *works correctly for 1 attribute* (Though, *the code iterates over all the attributes*). I have randomly selected nodes 'a' and 'c' to compare their attribute structures. I have also introduced additional tags for the sake of computation. The difficulty I am facing is, that order of attributes is insignifacnt for the XML parsing. *During one parsing instance*, attributes are returned in a different order; in another parsing instance, the same attribute list are returned in a different order. I have a feeling, that the solution can be fully solved using SET data structures(because within SET structures, unordered data can be kept) .. *The mathematical SET*, are implemented in the EXSLT library.. **I hope, I am correct ;)** Please see details about EXSLT at, www.exslt.org .. Regards, Mukul --- Arvind Bassi <arvind_bassi@xxxxxxxxxxx> wrote: > What is the best way to compare two elements in > terms of their > attributes, and the attribute values? I need to > ensure that each > element has the same number of attributes, the same > attribute names and > the same attribute values. > > I am currently working on a stylesheet which > compares two xml > documents, and generates the differences between > them. I have used Lar > Huttar's xml document comparison stylesheet as my > base (located at > http://www.dpawson.co.uk), but am stuck on > augmenting it with checks on > attributes. > > I am currently stuck with something along the lines > of: > > ... > <xsl:call-template name="compare-attributes"> > with nodes as parameters > ... > <xsl:template name="compare-attributes"> > <xsl:param name="attrA"/> > <xsl:param name="attrB"/> > <xsl:for-each select="$attrA/@*"> > .... check that the same attribute > exists with > .... the same attribute exists > if it does then compare the values > for equality > > </xsl:for-each> > </xsl:template> > > However, l cannot get a handle on each of the two > attributes to compare > them. Can somebody help to fill in the blanks? > > Thanks. > > Arvind. > > ________________________________________________________________________ > Want to chat instantly with your online friends? > Get the FREE Yahoo! > Messenger http://mail.messenger.yahoo.co.uk > > XSL-List info and archive: > http://www.mulberrytech.com/xsl/xsl-list > __________________________________ Do you Yahoo!? Exclusive Video Premiere - Britney Spears http://launch.yahoo.com/promos/britneyspears/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] How to compare the attributes, Arvind Bassi | Thread | RE: [xsl] How to compare the attrib, Michael Kay |
[xsl] How to compare the attributes, Arvind Bassi | Date | [xsl] non-breaking whitespace, Saverio Perugini |
Month |