
| |
Ce code XSLT permet de comparer deux XML, et de vérifier s'ils sont strictement égaux.
Le XSLT |
<? xml version="1.0" encoding="UTF-8"? >
<? xml-stylesheet type="text/xsl" href="C:\Documents and Settings\AMOUREUX\Mes documents\xmlsource\compOrd.xslt"? >
< xsl : stylesheet version = " 1.0 " xmlns : xsl = " http://www.w3.org/1999/XSL/Transform " >
< xsl : output method = " xml " version = " 1.0 " encoding = " UTF-8 " indent = " yes " / >
< xsl : template match = " / " >
les deux docs sont identiques ?
< xsl : variable name = " doc2 " > profondeur2.xml< / xsl : variable >
< xsl : variable name = " res " >
< xsl : choose >
< xsl : when test = " count(node())=count(document($doc2)/node()) " >
< xsl : apply-templates select = " /node() " >
< xsl : with-param name = " noeuds " select = " document($doc2)/node() " / >
< / xsl : apply-templates >
< / xsl : when >
< xsl : otherwise >
< xsl : value-of select = " 1 " / >
< / xsl : otherwise >
< / xsl : choose >
< / xsl : variable >
< xsl : choose >
< xsl : when test = " contains(string($res),'1') " > non < / xsl : when >
< xsl : otherwise > oui< / xsl : otherwise >
< / xsl : choose >
< / xsl : template >
< xsl : template match = " node() " >
< xsl : param name = " noeuds " / >
< xsl : variable name = " pos " select = " position() " / >
< xsl : choose >
< xsl : when test = " count(@*)=count($noeuds[$pos]/@*) and name(.)=name($noeuds[$pos]) and .=$noeuds[$pos] and count(node())=count($noeuds[$pos]/node()) " >
< xsl : variable name = " at " >
< xsl : apply-templates select = " @* " >
< xsl : with-param name = " noeuds " select = " $noeuds[$pos]/@* " / >
< / xsl : apply-templates >
< / xsl : variable >
< xsl : choose >
< xsl : when test = " not(contains(string($at),'1')) " >
< xsl : apply-templates select = " node() " >
< xsl : with-param name = " noeuds " select = " $noeuds[$pos]/node() " / >
< / xsl : apply-templates >
< / xsl : when >
< xsl : otherwise >
< xsl : value-of select = " 1 " / >
< / xsl : otherwise >
< / xsl : choose >
< / xsl : when >
< xsl : otherwise >
< xsl : value-of select = " 1 " / >
< / xsl : otherwise >
< / xsl : choose >
< / xsl : template >
< xsl : template match = " @* " >
< xsl : param name = " noeuds " / >
< xsl : variable name = " pos " select = " position() " / >
< xsl : if test = " not(name(.)=name($noeuds[$pos]) and .=$noeuds[$pos] ) " >
< xsl : value-of select = " 1 " / >
< / xsl : if >
< / xsl : template >
< / xsl : stylesheet >
|
|
| |
Ce script est un peu plus complexe car il vérifie sans tenir compte de l'ordre des noeuds.
Le XSLT | <? xml version="1.0" encoding="UTF-8"? >
< xsl : stylesheet version = " 1.0 " xmlns : xsl = " http://www.w3.org/1999/XSL/Transform " >
< xsl : output method = " xml " version = " 1.0 " encoding = " UTF-8 " indent = " yes " / >
< xsl : variable name = " doc " select = " document('profondeur2.xml') " / >
< xsl : template match = " / " >
les deux docs sont identiques ?
< xsl : variable name = " res " >
< xsl : choose >
< xsl : when test = " count(node())=count($doc/node()) " >
< xsl : apply-templates select = " /node() " >
< xsl : with-param name = " noeuds " select = " $doc/node() " / >
< / xsl : apply-templates >
< / xsl : when >
< xsl : otherwise >
< xsl : value-of select = " 1 " / >
< / xsl : otherwise >
< / xsl : choose >
< / xsl : variable >
< xsl : choose >
< xsl : when test = " contains(string($res),'1') " > non < / xsl : when >
< xsl : otherwise > oui< / xsl : otherwise >
< / xsl : choose >
< / xsl : template >
< xsl : template match = " node() " >
< xsl : param name = " noeuds " / >
< xsl : variable name = " Possible " select = " $noeuds[count(current()/@*)=count(./@*) and name(current())=name(.) and count(current()/node())=count(./node())] " / >
< xsl : choose >
< xsl : when test = " $Possible " >
< xsl : variable name = " Npos " >
< xsl : if test = " count(./@*)!=0 " >
< xsl : variable name = " courant " select = " current() " / >
< xsl : for-each select = " $Possible " >
< xsl : variable name = " at " >
< xsl : for-each select = " @* " >
< xsl : if test = " not($courant/@* [name(.)=name(current()) and .=current()]) " >
< xsl : value-of select = " 1 " / >
< / xsl : if >
< / xsl : for-each >
< / xsl : variable >
< xsl : if test = " not(contains(string($at),'1')) " >
< xsl : value-of select = " concat(';',position(),';') " / >
< / xsl : if >
< / xsl : for-each >
< / xsl : if >
< / xsl : variable >
< xsl : choose >
< xsl : when test = " count(./@*)=0 " >
< xsl : apply-templates select = " * " >
< xsl : with-param name = " noeuds " select = " $Possible/* " / >
< / xsl : apply-templates >
< xsl : apply-templates select = " text() " >
< xsl : with-param name = " noeuds " select = " $Possible/text() " / >
< / xsl : apply-templates >
< xsl : apply-templates select = " comment() " >
< xsl : with-param name = " noeuds " select = " $Possible/comment() " / >
< / xsl : apply-templates >
< / xsl : when >
< xsl : when test = " contains(string($Npos),';' ) " >
< xsl : apply-templates select = " * " >
< xsl : with-param name = " noeuds " select = " $Possible[contains(string($Npos),concat(';',position(),';'))]/* " / >
< / xsl : apply-templates >
< xsl : apply-templates select = " text() " >
< xsl : with-param name = " noeuds " select = " $Possible[contains(string($Npos),concat(';',position(),';'))]/text() " / >
< / xsl : apply-templates >
< xsl : apply-templates select = " comment() " >
< xsl : with-param name = " noeuds " select = " $Possible[contains(string($Npos),concat(';',position(),';'))]/comment() " / >
< / xsl : apply-templates >
< / xsl : when >
< xsl : otherwise >
< xsl : value-of select = " 1 " / >
< / xsl : otherwise >
< / xsl : choose >
< / xsl : when >
< xsl : otherwise >
< xsl : value-of select = " 1 " / >
< / xsl : otherwise >
< / xsl : choose >
< / xsl : template >
< xsl : template match = " text()|comment() " >
< xsl : param name = " noeuds " / >
< xsl : if test = " not($noeuds[.=current() and name(.)='']) " >
< xsl : value-of select = " 1 " / >
< / xsl : if >
< / xsl : template >
< / xsl : stylesheet >
|
|
| |
Cette information peut-être utile pour avoir une idée de la complexité des données qui sont stockées.
Le XSLT | <? xml version="1.0" encoding="UTF-8"? >
< xsl : stylesheet version = " 1.0 " xmlns : xsl = " http://www.w3.org/1999/XSL/Transform " >
< xsl : output method = " xml " version = " 1.0 " encoding = " UTF-8 " indent = " yes " / >
< xsl : template match = " / " >
profondeur : < xsl : call-template name = " profondeur " >
< xsl : with-param name = " noeud " select = " / " / >
< / xsl : call-template >
< / xsl : template >
< xsl : template name = " profondeur " >
< xsl : param name = " noeud " / >
< xsl : param name = " prof " select = " 0 " / >
< xsl : choose >
< xsl : when test = " $noeud/* " >
< xsl : call-template name = " profondeur " >
< xsl : with-param name = " noeud " select = " $noeud/* " / >
< xsl : with-param name = " prof " select = " $prof + 1 " / >
< / xsl : call-template >
< / xsl : when >
< xsl : otherwise >
< xsl : value-of select = " $prof " / >
< / xsl : otherwise >
< / xsl : choose >
< / xsl : template >
< / xsl : stylesheet >
|
|
| |
Permet de quantifier la taille de chaque niveau de donnée.
Le XSLT |
<? xml version="1.0" encoding="UTF-8"? >
< xsl : stylesheet version = " 1.0 " xmlns : xsl = " http://www.w3.org/1999/XSL/Transform " xmlns : fo = " http://www.w3.org/1999/XSL/Format " >
< xsl : output method = " xml " version = " 1.0 " encoding = " UTF-8 " indent = " yes " / >
< xsl : key name = " prof " match = " * " use = " count(ancestor-or-self::*) " / >
< xsl : template match = " / " >
< res >
< xsl : call-template name = " profondeur " >
< xsl : with-param name = " It " select = " 1 " / >
< / xsl : call-template >
< / res >
< / xsl : template >
< xsl : template name = " profondeur " >
< xsl : param name = " It " / >
< xsl : variable name = " noeud " select = " key('prof',$It) " / >
< xsl : if test = " $noeud " >
< xsl : if test = " $noeud[not(*)] " >
Il existe < xsl : value-of select = " count($noeud[not(*)]) " / > feuille(s) de profondeur < xsl : value-of select = " $It " / >
< br / >
< / xsl : if >
< xsl : call-template name = " profondeur " >
< xsl : with-param name = " It " select = " $It + 1 " / >
< / xsl : call-template >
< / xsl : if >
< / xsl : template >
< / xsl : stylesheet >
|
|
Consultez les autres pages sources
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2006
Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|