Bonjour,
> -----Original Message-----
> From: CANDAT Jerome [mailto:jerome.candat@c-s.fr]
> Sent: jeudi 17 avril 2003 15:55
> To: xml-tech@xmlfr.org
> Subject: [xml-tech] Xpath & Xquery
>
> Bonjour,
>
> Est il possible d'utiliser des expressions régulières lorsque l'on
> chercher
> des éléments avec XPath?
"Directement", non: comprendre que ni [XSLT], ni [XPath] (1.0) ne le prévoient dans leurs modèles de sélection/syntaxe d'expressions; mais, selon le processeur XSLT/XPath que vous utilisez, vous pourrez peut-être avoir recours à ce que XSLT appelle des "[fonctions d'extension]" -- un bon petit (*) exemple valant mieux qu'un long discours, voici ce que l'on peut ainsi faire avec l'implémentation [MSXML3,4,XML/XSL.NET] -- ainsi, il ne répond pas tout à fait à votre question (qui porte spécifiquement sur XPath) mais montre comment son "allié" XSLT peut rendre cela possible avec certains processeurs :
-- texte.xml
<?xml version="1.0" encoding="iso-8859-1" ?>
<texte>
<p><date>April 22, 2003</date></p>
<p>Hello, I was born on... Well, oK, let's do it in french, rather :</p>
<p>Je suis né le <date>10 mai 1970</date>.</p>
<p>Sur moi? Bof... pas grand-chose à raconter, ma foi.</p>
<p>Par contre, le <date>10/02/1998</date> fut un grand jour à mon avis : la naissance (officielle) de ce cher XML bien sûr!</p>
<p>Sans oublier le <date>16 novembre... 1999</date> : celle de XSLT/XPath !</p>
</texte>
-- quels-formats-de-dates.xsl
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:dtf="votre-namespace-ici"
version="1.0">
<msxsl:script language="JScript" implements-prefix="dtf"><![CDATA[
function /*Boolean*/ dateFormatOf(/*String*/ aDate)
{
var result = "inconnu";
var frenchDateNaiveRegex = /[0-9][0-9] [a-zA-Z]+ [0-9]+/;
var englishDateNaiveRegex = /[a-zA-Z]+ [0-9][0-9], [0-9]+/;
var numericDateNaiveRegex = /[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]/;
if(frenchDateNaiveRegex.test(aDate))
result = "francais";
else if(englishDateNaiveRegex.test(aDate))
result = "anglais";
else if(numericDateNaiveRegex.test(aDate))
result = "numerique";
return result;
}
]]></msxsl:script>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="texte">
<html>
<head>
<title>Reconnaitre des formats de dates...</title>
</head>
<body>
<h1>Reconnaitre des formats de dates...</h1>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="date">
<xsl:value-of select="." /> (format de date "<xsl:value-of select="dtf:dateFormatOf(string(.))" />")
</xsl:template>
<xsl:template match="p">
<xsl:copy><xsl:apply-templates /></xsl:copy>
</xsl:template>
</xsl:transform>
Ce qui nous donne :
"Reconnaitre des formats de dates...
April 22, 2003 (format de date "anglais")
Hello, I was born on... Well, oK, let's do it in french, rather :
Je suis né le 10 mai 1970 (format de date "francais") .
Sur moi? Bof... pas grand-chose à raconter, ma foi.
Par contre, le 10/02/1998 (format de date "numerique") fut un grand jour à mon avis : la naissance (officielle) de ce cher XML bien sûr!
Sans oublier le 16 novembre... 1999 (format de date "inconnu") : celle de XSLT/XPath !"
(*) (... qui m'a tout de même pris un bon 1/4 d'heure à bricoler; bah, quand c'est pour la liste... "la bonne cause" :)
[XSLT] -- modèles de sélection (de nœuds)
* http://www.w3.org/TR/xslt#patterns
[XPath] -- syntaxe d'expressions
* http://www.w3.org/TR/xpath#section-Expressions
[fonctions d'extension] (en XSLT)
* http://www.w3.org/TR/xslt#section-Extension-Functions
[MSXML3,4,XML/XSL.NET]
* http://msdn.microsoft.com/library/en-us/xmlsdk30/htm/xmmscxmloverview.asp
* http://msdn.microsoft.com/library/en-us/xmlsdk/htm/sdk_intro_6g53.asp
* http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXsl.asp
> La même chose avec XQuery?
Je ne sais pas.
Bien à vous,
Cyril
> Merci d'avance,
> Jérôme.
> [...]
--
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 Tue Apr 22 10:06:01 2003