From: Jandia Cyril (cjandia@logfi.fr)
Date: 08/03/2002 - 09:16
> De : Sandrine Pilon
> À : xml-tech@xmlfr.org
> Objet : [xml-tech] Identifier un type de données
>
> Bonjour,
>
> Y a t il une possibilité pour identifier si un attribut ou un
> element est de
> type 'string' ou 'number' ?
Il conviendrait peut-être de préciser qq peu votre question ;o)
à savoir : en utilisant [XPath 1.0] dans [XSLT 1.0], ou bien une API DOM
après parsing du document, ou autre?
Quoiqu'il en soit, s'il s'agit pour vous de le faire via XPath/XSLT, les
fonctions [string()] et [number()] de [XPath 1.0] vous offrent un moyen
assez simple (mais pas nécessairement très robuste : je vous laisse seule
juge ;o) - disons, par exemple :
----- data.xml -----
<?xml version="1.0" ?>
<Donnees>
<Donnee id="d1" val="une chaine" />
<Donnee id="d2" val="2010" />
<Donnee id="d3" val=".5" />
<Donnee id="d4" val="3.1416" />
<Donnee id="d5" val="7." />
<Donnee id="d6" val="2002-03-08" />
<Donnee id="d7" val="3.1416E5" />
<Donnee id="d8" val="une autre chaine" />
</Donnees>
----- type.xsl -----
<?xml version="1.0" ?>
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="Donnees">
<html>
<head><title>Test</title></head>
<body>
<h1>Donnees</h1>
<dl>
<xsl:apply-templates />
</dl>
</body>
</html>
</xsl:template>
<xsl:template match="Donnee">
<dt><b><xsl:value-of select="@id" /></b></dt>
<dd>
<xsl:choose>
<xsl:when test="string(number(@val)) != 'NaN'">Number : <xsl:value-of
select="@val" /></xsl:when>
<xsl:otherwise>String : <xsl:value-of select="@val" /></xsl:otherwise>
</xsl:choose>
</dd>
</xsl:template>
</xsl:transform>
Ce qui normalement produit qq chose comme (testé avec MSXML3) :
----- data.htm -----
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Test</title></head>
<body>
<h1>Donnees</h1>
<dl>
<dt><b>d1</b></dt>
<dd>String : une chaine</dd>
<dt><b>d2</b></dt>
<dd>Number : 2010</dd>
<dt><b>d3</b></dt>
<dd>Number : .5</dd>
<dt><b>d4</b></dt>
<dd>Number : 3.1416</dd>
<dt><b>d5</b></dt>
<dd>Number : 7.</dd>
<dt><b>d6</b></dt>
<dd>String : 2002-03-08</dd>
<dt><b>d7</b></dt>
<dd>String : 3.1416E5</dd>
<dt><b>d8</b></dt>
<dd>String : une autre chaine</dd>
</dl>
</body>
</html>
(où vous pouvez d'ailleurs noter -d'après le résultat obtenu- que la
notation scientifique utilisée pour la donnée "d7" n'est pas reconnue comme
l'écriture d'un nombre par [XPath 1.0] - il faut donc écrire : "314160" au
lieu de "3.1416E5")
[XPath 1.0]
http://xmlfr.org/w3c/TR/xpath
[XSLT 1.0]
http://xmlfr.org/w3c/TR/xslt
[string()]
http://xmlfr.org/w3c/TR/xpath/#section-String-Functions
[number()]
http://xmlfr.org/w3c/TR/xpath/#section-Number-Functions
> Thanks for your help,
> Sandrine
'Hope it helps
Cordialement,
Cyril Jandia
--
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
|