From: Benoît Barré (benoitbarre@free.fr)
Date: 06/06/2002 - 10:33
Une reprise du code de Cyril avec utilisation de l'extension node-set (de MS
dans ce cas), qui permet d'aller plus loin (comptage des erreurs notamment) :
<?xml version="1.0" ?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
version="1.0">
<xsl:variable name="kind-check"><xsl:copy-of select="//info[not(starts-with
(string(@kind),'j-'))]|@*"/></xsl:variable>
<xsl:template match="/">
<html>
<head>
<title>Valid kinds ?</title>
</head>
<body>
<h1>Valid kinds ?</h1>
<xsl:value-of select="count(msxsl:node-set($kind-check)/*)"/> error(s)
<xsl:for-each select="msxsl:node-set($kind-check)/*">
<li><xsl:copy-of select="."/></li>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Cordialement,
Benoît
En réponse à Cyril Jandia <cjandia@logfi.fr>:
>
> > De : Frédéric Laurent
> > À : xml-tech@xmlfr.org
> > Objet : [xml-tech] formulation xpath
> >
> > Bonjour,
> >
> > j'ai un petit problème pour exprimer une condition sur un document
> XML
> > dans une feuille XSLT.
> > [...]je voudrais traiter les cas d'erreurs dans le document. Un cas
> d'erreur
> > est un attribut kind ne commençant pas par "j-"
> > Mon expressions serait donc: "s'il y a au moins 1 noeud ayant kind
> pour
> > attribut et que cet attribut ne commence pas par j-"
> >
> > quelque chose qui pourrait s'apparenter à
> > <xsl:if test="//*[not(starts-with(@kind,'j-'))]">
> > il y a des erreurs : traitement ...
> > </xsl:if>
> > [...]quelqu'un a une idée, une piste ?
>
> Une solution en deux temps est :
> 1) d' "accumuler" dans une variable des caractères arbitraires (par
> exemple de
> multiples "!") pour tous les attributs "kind" (trouvés) n'ayant pas une
> écriture
> de valeur correcte;
> 2) de tester cette variable en tant que chaîne pour savoir si elle est
> vide;
> alors :
> chaîne vide <==> tous les attributs "kind" (trouvés) sont OK.
>
> Ainsi, ceci :
>
> <?xml version="1.0" ?>
>
> <xsl:stylesheet
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
>
> <xsl:variable name="kind-check"><xsl:for-each select="//*/@kind">
> <xsl:choose><xsl:when test="not(starts-with(string(.),
> 'j-'))">!</xsl:when><xsl:otherwise /></xsl:choose>
> </xsl:for-each></xsl:variable>
>
> <xsl:template match="/">
> <html>
> <head>
> <title>Valid kinds ?</title>
> </head>
> <body>
> <h1>Valid kinds ?</h1>
> <xsl:choose>
> <xsl:when test="string($kind-check) != ''">
> One kind (at least) NOT OK
> </xsl:when>
> <xsl:otherwise>
> Kinds OK
> </xsl:otherwise>
> </xsl:choose>
> </body>
> </html>
> </xsl:template>
>
> </xsl:stylesheet>
>
> Donne :
>
> a) sur cette entrée :
> <root>
> <info kind="j-a">...</info>
> <info kind="j-b">...</info>
> <info kind="j-c">...</info>
> </root>
> ce résultat :
> Valid kinds ?
> Kinds OK
>
> b) sur cette entrée :
> <root>
> <info kind="j-a">...</info>
> <info kind="b">...</info>
> <info kind="j-c">...</info>
> </root>
> ce résultat :
> Valid kinds ?
> One kind (at least) NOT OK
>
> c) enfin, sur cette entrée :
> <root>
> ...
> </root>
> ce résultat :
> Valid kinds ?
> Kinds OK
>
> > --
> > Frédéric Laurent
> > http://www.opikanoba.org
>
> Cordialement,
> --CJ
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|