Comment analyser une Processing Instruction avec XSLT ?
Eric van der Vlist,
Dyomedea (vdv@dyomedea.com).
jeudi 11 janvier 2001
Je désire formater un document XML commençant ainsi:
<?xml version="1.0" encoding="UTF-8"?>
<?electronicForm EFID="etudetest" version="1" title="etude de test"?>
<?xml-stylesheet type="text/xsl" href="pi.xsl"?>
<EMC …
Je voudrais récupérer la valeur de l'@EFID de ma processing instruction.
J'ai essaye avec:
<xsl:value-of select="processing-instruction()/@EFID"/>
Mais le résultat vide. Y a t-il un moyen de récupérer cette valeur?
Oui, mais les PIs sont de bien étranges animaux et c'est laborieux.
Bien que leur syntaxe ressemble à celle des autres balises, lorsque vous écrivez EFID="etudetest" dans une PI, ce n'est pas considéré comme un attribut...
Tout d'abord, attention à ce que vous sélectionnez. Lorsque vous écrivez select="processing-instruction()", vous sélectionnez les 2 PIs présentes dans votre document.
Il est donc plus prudent d'écrire:
select="processing-instruction('electronicForm')"
Ensuite, le noeud que vous sélectionnez ainsi n'a pas d'attributs (une PI n'a aucun descendant) mais un nom (electronicForm) et une valeur (EFID="etudetest" version="1" title="etude de test").
Vous pouvez récupérer cette valeur comme d'habitude (xsl:value-of), mais c'est à vous de l'analyser.
Dans votre cas particulier, quelque chose comme:
<xsl:value-of
select="substring-before(
substring-after(
substring-after(
processing-instruction('electronicForm'),
'EFID'), '"'), '"')"/>
devrait faire l'affaire...
Cyril Balit: "[xml-tech] processing instruction"Michael Tartar: "[xml-tech] Re: processing instruction"Eric van der Vlist: "[xml-tech] Re: processing instruction"Verachten Bruno: "[xml-tech] Processing-Instruction (was Re: XSL)"Eric van der Vlist: "[xml-tech] Re: Processing-Instruction (was Re: XSL)"
Copyright 2001,
Eric van der Vlist.
|