2009-09-19 3 views
3

J'ai un simple fichier XSL qui ressemble à:XSL utilisation d'importation pour localiser les chemins de fichiers relatifs sous Windows

<?xml version='1.0'?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:import href="html/docbook.xsl"/> 

</xsl:stylesheet> 

J'ai un fichier XSL qui se trouve dans un dossier sur le disque (pas sur le web). Il est le chemin relatif à mon fichier XSL (ci-dessus) est:

..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl 

<xsl:import href="..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl"/> 

ou

<xsl:import href="../../../Dependencies/XSL/xsl/htmlhelp/htmlhelp.xsl"/> 

ne semble pas fonctionner (je reçois - le fichier ne peut pas trouver - des erreurs de l'outil de xslproc.)

Quelle est la bonne façon d'écrire des chemins relatifs dans le XSL: import?

Merci à l'avance,

Paul

Répondre

3

Certes, les personnages à barres obliques avant sont ceux à utiliser, à savoir

<xsl:import href="..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl"/> 

est positivement incorrect, pas besoin de poursuivre cette Piste.

Le problème peut être que le "Base URI" (tel que défini dans la RFC 2396) n'est pas ce que nous attendons. Bien que je crois que la norme est explicite sur les règles relatives à la détermination de l'URI de base, il existe une certaine ambiguïté avec les différents processeurs xslt. Si vous êtes w/XSLT 2.0, vous pouvez essayer d'utiliser fn: base-uri() pour voir que cet URI est bien celui que vous attendez.

5

Il serait utile que vous décriviez comment vous essayez d'exécuter vos feuilles de style.

Un problème commun avec les chemins relatifs pour include/import en Java: Lorsque vous chargez un XSLT comme StreamSource et ne définissez pas SystemID, le processeur ne sait pas « où » le XSLT est et ne peut pas résoudre les chemins relatifs.

http://www.onjava.com/pub/a/onjava/excerpt/java_xslt_ch5/index.html?page=5

En fournissant un identifiant du système en tant que paramètre à la StreamSource, vous êtes dire le processeur XSLT où look pour commonFooter.xslt. Sans ce paramètre, vous pouvez rencontrer une erreur lorsque le processeur ne peut pas résoudre cet URI. La solution simple est de appeler la méthode setSystemId() comme suit:

// construct a Source that reads from an InputStream 
Source mySrc = new StreamSource(anInputStream); 
// specify a system ID (a String) so the 
// Source can resolve relative URLs 
// that are encountered in XSLT stylesheets 
mySrc.setSystemId(aSystemId); 

L'autre chose à vérifier est que vos chemins relatifs sont en effet correct. Accédez à l'emplacement de votre XSLT dans l'invite de commande et accédez à ce chemin relatif pour voir s'il trouve le fichier.

1

J'ai testé une simple importation de feuilles de style en utilisant votre chemin relatif et xsltproc. Cela a fonctionné pour moi - donc votre chemin relatif doit être mauvais.

-1

Utilisez xsltproc --stringparam fichier baseURI: ///path/to/your/stylesheet.xsl -o result.xml stylesheet.xsl input.xml

Questions connexes