Bonjour,
Je reproduis votre problème avec MSXML3 en effet :
-- Script de test (test.js) :
var xml = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
var xsl = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
xml.async = false;
xml.validateOnParse = false;
xml.load(WScript.Arguments(0));
xsl.async = false;
xsl.validateOnParse = false;
xsl.load(WScript.Arguments(1));
var result = xml.transformNode(xsl);
WScript.StdOut.Write(result);
-- Exécution :
C:\...>cscript //nologo test.js data.xml style.xsl > out.htm
-- Données (data.xml) :
<?xml version="1.0" encoding="iso-8859-1" ?>
<doc>
<liens>
<lien id="lien1"
path="http://www.quelquepart.com/site/le.chemin.référencé; là-bas" />
<lien id="lien2"
path="file://C:/Mes Documents/le.chemin.référencé ici" />
<lien id="lien3"
path="ftp://ftp.ailleurs.com/documents/référencés là aussi" />
</liens>
</doc>
-- Transformation (style.xsl) :
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" version="4.0" encoding="iso-8859-1" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="doc">
<html>
<head><title>Test...</title></head>
<body>
<h1>Test...</h1>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="liens">
<dl><xsl:apply-templates /></dl>
</xsl:template>
<xsl:template match="lien">
<dt><strong><xsl:value-of select="@id" /></strong></dt>
<dd><a href="{@path}">le lien</a></dd>
</xsl:template>
</xsl:transform>
-- Résultat (out.htm) :
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Test...</title></head>
<body>
<h1>Test...</h1>
<dl><dt><strong>lien1</strong></dt>
<dd><a href="http://www.quelquepart.com/site/le.chemin.r%C3%A9f%C3%A9renc%C3%A9
l%C3%A0-bas">le lien</a></dd>
<dt><strong>lien2</strong></dt>
<dd><a href="file://C:/Mes Documents/le.chemin.r%C3%A9f%C3%A9renc%C3%A9 ici">le
lien</a></dd>
<dt><strong>lien3</strong></dt>
<dd><a href="ftp://ftp.ailleurs.com/documents/r%C3%A9f%C3%A9renc%C3%A9s l%C3%A0
aussi">le lien</a></dd>
</dl>
</body>
</html>
La solution ?
Dans cet exemple, on peut essayer de réécrire le dernier <xsl:template
match="lien">... en ceci :
<xsl:template match="lien">
<dt><strong><xsl:value-of select="@id" /></strong></dt>
<dd><xsl:choose>
<xsl:when test="starts-with(@path, 'file://')"><xsl:text
disable-output-escaping="yes"><a href="</xsl:text>
<xsl:value-of select="@path" />
<xsl:text disable-output-escaping="yes">">le
lien</a></xsl:text></xsl:when>
<xsl:otherwise><a href="{@path}">le lien</a></xsl:otherwise>
</xsl:choose></dd>
</xsl:template>
Ce qui donne :
-- Résultat (2) :
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Test...</title></head>
<body>
<h1>Test...</h1>
<dl><dt><strong>lien1</strong></dt>
<dd><a href="http://www.quelquepart.com/site/le.chemin.r%C3%A9f%C3%A9renc%C3%A9
l%C3%A0-bas">le lien</a></dd>
<dt><strong>lien2</strong></dt>
<dd><a href="file://C:/Mes Documents/le.chemin.référencé ici">le lien</a></dd>
<dt><strong>lien3</strong></dt>
<dd><a href="ftp://ftp.ailleurs.com/documents/r%C3%A9f%C3%A9renc%C3%A9s l%C3%A0
aussi">le lien</a></dd>
</dl>
</body>
</html>
En espérant que cela aide,
Cordialement,
Cyril Jandia
-----Original Message-----
From: xml-tech-bounce@xxxxxxxxx [mailto:xml-tech-bounce@xxxxxxxxx] On Behalf Of
Verachten Bruno
Sent: mardi 10 août 2004 14:09
To: xml-tech@xxxxxxxxx
Subject: [xml-tech] [XSLT] Output en mode HTML et liens
Bonjour,
je cherche à générer un document HTML à partir d'un document XML par XSLT.
Jusque là, tout va bien.
Lorsqu'on cherche à générer des éléments a, l'attribut href se trouve
être URLEncodé.
Jusque là, tout va bien, les documents liés par le protocole "HTTP"
avec des accents dans leur URL sont remontés correctement.
Mon problème est le traitement des liens avec protocole "file": les
URLs sont également URLEncodées, et ça ne fonctionne pas (sous
Windows), le système n'arrivant pas à mettre la main sur des documents
dont le chemin est parsemé de %C3%A9%20.
J'ai regardé les archives XMLFR, et Google, mais pour l'instant, je ne
trouve rien.
Quelqu'un a-t'il déjà été confronté au problème?
Merci.
Bruno Verachten
[...]
__________________________________________________________________________________________________________________________________________________
This e-mail and any files transmitted with it are confidential and intended
solely for the use of the individual to whom it is addressed.If you
have received this email in error please send it back to the person that sent
it to you. Unauthorized publication, use, dissemination, forwarding,
printing or copying of this email and its associated attachments is strictly
prohibited.
|