Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Commentaires et questions non techniques.Commentaires et questions techniques.

 
Cliquez ici.

xml tech : Technologies XML

[xml-tech] Re: xslt -> following-sibling dans un "match="

[xml-tech] Re: xslt -> following-sibling dans un "match="

Auteur: Eric van der Vlist <vdv@dyomedea.com>
Date: 03/02/2005 - 07:07
X-Mailer: Evolution 2.0.2

Bonjour,

Le jeudi 03 février 2005 à 02:39 +0100, alexandre a écrit :
> Bonjour à tous,
>
> J'ai une erreur lorsque j'utilise "following-sibling" dans une
> expression de "match=.."
> (par exemple : <xsl:template match="following-sibling::noeud">)
> (error : xsltCompileStepPattern : 'child' or 'attribute' expected)
> message d'erreur retourné par xsltproc sous linux (voir infos version à
> la fin du message, si ca peut éclairer).
>
> Je ne sais pas si il s'agit de ma mauvaise compréhension des expressions
> qu'on peut utiliser dans un "match=.." (fort probable),

Je le crains ;-) ...

Les restrictions imposées aux expressions XPath dans l'attribut match
d'un template sont définies par la recommandation XSLT qui dit
(http://xmlfr.org/w3c/TR/xslt/#section-Defining-Template-Rules) :

Un motif doit concorder avec la grammaire des motifs (Pattern). Un motif
est un ensemble de motifs de chemins de localisation séparés par |. Un
motif de chemin de localisation est un chemin de localisation dont les
étapes n'utilisent que les axes child ou attribute. Bien que les motifs
ne doivent pas utiliser l'axe descendant-or-self, ils peuvent utiliser
l'opérateur // tout aussi bien que l'opérateur /. Les motifs de chemins
de localisation peuvent aussi commencer par un appel de fonction id ou
key avec un argument littéral. Les prédicats d'un motif peuvent utiliser
n'importe quelle expression exactement comme ceux des chemins de
localisation.

Avant d'en donner la grammaire sous forme EBNF...

> ou si il s'agit
> d'une limitation du processeur xslt que j'utilise.
>
> En revanche, si je met le "following-sibling" dans un "select=.."
> (par exemple : <xsl:apply-templates select="following-sibling::noeud"/>)
> ca fonctionne sans problème.
>
> Voilà, ma question s'arrète là.
> Merci d'avance à tous ceux qui pourraient éclairer ma lanterne.
>
> Alexandre
>
> PS.. si vous voulez plus de détails sur ce qui m'ammène à poser cette
> question :
> J'essaies de transformer la structure d'un document xml.
>
> <!-- exemple simplifié et synthétique du document original -->
> <..>
> <parent>(1 à n)
> <sibling>(1 à n)
> <sibling-précédent>
> <detail ordre="1">detail 1 (à n)<![CDATA[code]]></detail>
> <..>
> </parent>
> <..>
> <!-- ----------------------------------------------------- -->
>
> <!-- résultat souhaité------------------------------------ -->
> <..>
> <parent>(1 à n)
> <sibling>(1 à n)
> <sibling-précédent>
> <details>
> <detail ordre="1">detail 1 (à n)<![CDATA[code]]></detail>
> <..>
> </details>
> </parent>
> <..>
> <!-- ----------------------------------------------------- -->
>
> J'aimerais donc utiliser
> <!-- par exemple ---------------------------------------- -->
> <xsl:template match="/">
> <xsl:copy>
> <xsl:apply-templates select="@* | * | text()"/>
> </xsl:copy>
> </xsl:template>
>
> <xsl:template match="following-sibling::sibling-précédent">
> <details>
> <xsl:copy>
> <xsl:apply-templates select="@* | * | text()"/>
> </xsl:copy>
> </details>
> </xsl:template>

Pour contourner cela, il faut écrire :

<xsl:template match="*::[preceding-sibling::sibling-précédent]">, c'est
à dire (si j'ai bien compris ce que vous voulez obtenir) "n'importe quel
élément dont un "preceding sibling" est l'élément "sibling-précédent".

> <!-- ----------------------------------------------------- -->
>
> ... ça serait sympa si ça marchait comme ça... au moins j'aurais
> l'impression de comprendre un peu xslt et xpath ;)
> Outre le problème principal, j'ai un autre petit problème : les copies
> (<xsl:copy> ou <xsl:copy-of..>) suppriment mes balises <![CDATA[]]>. Je
> ne sais pas comment faire pour les conserver.
> ...merci d'avoir lu jusque là :]

Il n'y a pas qu'eux qui les suppriment :-) ... Le modèle de données
XPath ne connaît pas la notion de CDATA et les transformations XSLT ne
les voient pas (elles sont traduites en noeuds texte comme le reste).

Par contre, vous pouvez spécifier, avec l'attribut
cdata-section-elements de l'élément xsl:output, une liste d'éléments
dont vous souhaitez forcer l'écriture sous forme de sections CDATA
(qu'ils aient été écrits de la sorte dans le document source ou non) :

http://xmlfr.org/w3c/TR/xslt/#section-XML-Output-Method

Cordialement,

Eric van der Vlist

-- 
If you have a XML document, you have its schema.
                                                  http://examplotron.org
------------------------------------------------------------------------
Eric van der Vlist       http://xmlfr.org            http://dyomedea.com
(ISO) RELAX NG   ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
--
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)
Received on Thu Feb 3 08:07:32 2005

Archive générée par hypermail 2.1.8 le 28/02/2005 - 17:42 UTC

webmaster@xmlfr.org

 

xml tech

Discussions techniques au sujet de XML.

Cette liste est à votre disposition pour discuter en français de tout sujet technique lié à XML.



Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot@online.fr  

Conception, réalisation et hébergement