From: Benoit Lefevre (benoit.lefevre@effix.fr)
Date: 14/08/2001 - 07:34
Bonjour.
Tout d'abord je precise que ce que je vais dire n'est pas certain;
j'ai moi meme quelques difficultes avec les namespaces.
Voila commen je vois les choses pour l'instant : un namespace c'est
,comme son nom l'indique, une "zone de nomage". Dans ton cas
quand tu rajoutes un namespace au tague <a>, tu precises au
processeur xsl que le nom du tague en question appartiend a l'espace
de nomage "test.com"
Ici ton probleme c'est qu'une fois que tu a fait ca, le tague <a> ainsi
que tous ses fils sont alors consideres comme appartenant a cet
espace de nomage !!
Donc dans ta stylesheet quand tu fait referance a : "//b/c" tu designes
quelque chose qui n'apparait pas du tout dans ton document car il faut
bien voir que l'expression "//b/c" designe des tagues appartenants a
l'espace de nommage par default alors que ton <b> et ton <c>
appartiennent eux a l'espace de nommage test.com.
Pour resumer : "//b/c" est totalement different (pour le processeur
en tous les cas) de "//test.com:b/test.com:c".
pour resoudre ton probleme et faire les choses plus proprement il faut :
1) d'une part donner un "alias" a ton espace de nomage test.com, comme
ceci (prenons "monns" par exemple) :
<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:monns="test.com">
<monns:b>
<monns:c>TOTO</monns:c>
</monns:b>
</monns:a>
C'est plus long a ecrire mais c'est plus claire
lorsque tu as plusieurs espaces de nommages qui
cohabitent dans le meme document xml. C'est meme
indispenssable de prefixer les tags pour qu'il n'y ai
pas de collision de nom lorsque deux espaces de
nommage possedent des tagues ayants le meme nom. On
peu imaginer par exemple un espace de nommage
"entreprise" dans lequel il y a le tag <nom>
(de l'entreprise) et un espace de nommage "employe"
dans lequel il y a le tague <nom> (de l'employe).
pour faire cohabiter ces deux tagues dans le meme
document on ecrit alors :
<entreprise:nom>
<entreprise:employes>
<employe:nom>marcel</employe:nom>
<employe:nom>jean</employe:nom>
<employe:nom>maurice</employe:nom>
<employe:nom>bertrand</employe:nom>
</entreprise:employes>
</entreprise:nom>
2) d'autre part dans ta feuille xsl tu declares un
(ou des) alias pour l'espace de nommage avec lequel
(ou lesquels) tu est sence travailler.
En pratique tu fais ca comme ca :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:monns=test.com>
<xsl:output method="xml" version="1.0"
encoding="UTF-8"
indent="yes" />
<xsl:template match="/">
<xsl:value-of select="//monns:b/monnsc" />
</xsl:template>
</xsl:stylesheet>
de cette maniere tu est certain que ta feuille et
ton document parlent de la meme chose.
Le selecte de ton value-of devrait donc fonctionner un
peut mieux (j'espere :)
Une derniere chose : tout ce que je viens de dire
doit s'appliquer quand tu veux faire referance a
un tague, et ce ou que ce soit :
- dans une stylesheet :
dans un select,
dans un match,
dans un test,
dans un Xpath.
- dans un xml.
Cordialement.
Benoit lefevre.
PS : pour revenire a cette histoire de namespace tu
remarqueras qu'une stylesheet etant elle meme ecrite
en XML il faut egalement designer les tagues XSL via
un alias, ici "xsl:".
--
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
|