Ich habe mich mit xslt befasst und angefangen, mit den Beispielen auf w3schools zu testen.
Wenn ich jedoch XML und XSL in Dateien speichere und versuche, sie lokal zu öffnen, führt Chrome die XSL-Transformation nicht durch. Es wird nur eine leere Seite angezeigt.
Ich habe das <?xml-stylesheet type="text/xsl" href="style.xsl">
Tag zum XML-Dokument hinzugefügt und Firefox rendert es so, wie es aussehen soll. Wenn ich die Dateien über einen Webserver betrachte, zeigt Chrome die Datei so an, wie sie aussehen soll.
Ist es so, dass Chrome Probleme hat, die Stylesheet-Informationen zu finden, wenn der Link lokal ist? Das Ändern der href auf file:///C:/xsl/style.xsl
machte keinen Unterschied.
Update: Dies scheint ein Nebeneffekt einer Sicherheitsrichtlinie zu sein , die Datei: /// * nicht als denselben Ursprung behandelt. Dadurch wird der folgende Fehler in der Konsole angezeigt:
Unsicherer Versuch, die URL-Datei: /// C: /xsl-rpg/style.xsl aus dem Frame mit der URL-Datei: /// C: /xsl-rpg/data.xml zu laden. Domänen, Protokolle und Ports müssen übereinstimmen.
quelle
file:
, als würde Chrome aus dem Protokoll den gleichen Domänenfehler auslösen.Antworten:
Die kurze Antwort lautet "Nein, verwenden Sie einen der verschiedenen Browser " .
Der Grund, warum dies nicht funktioniert, liegt in einer Sicherheitsbedenken, die Chrome auf kontroverse Weise angesprochen hat [1] [2] [3] [4] , indem XML-Dateien daran gehindert wurden, auf lokale XSLT-Dateien im selben Verzeichnis zuzugreifen, während HTML Dateien können problemlos auf CSS-Dateien im selben Verzeichnis zugreifen.
In Bezug auf die oben genannten Probleme haben Benutzer nach einer klareren Fehlermeldung gefragt (da die Domänen, Protokolle und Ports tatsächlich übereinstimmen) oder zumindest das XML ohne das Styling angezeigt. Chrome-Entwickler haben diese Anforderungen ignoriert.
quelle
Sie können dies lokal mithilfe der Befehlszeilenflags von Chrome tun.
Die spezifische Flagge ist
--allow-file-access-from-files
Unter OS X: von Terminal.app ausführen
/Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files
Unter Windows: An der Eingabeaufforderung ausführen
%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files
Hinweis: Sie müssen Chrome wahrscheinlich beenden, wenn es derzeit ausgeführt wird
quelle
C:\Program Files (x86)\Google\Chrome\Application
und der Befehl --allow-file-access-from-files wird einwandfrei ausgeführt, aber mein lokales XML-Dokument (transformiert durch a lokale XSLT-Datei) wird nicht angezeigt./Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-files
arbeitete für mich. Offensichtlich betreibe ich den Chrome Canary. Nach dem Ausführen dieses Befehls sollte ein neues Chrome-Fenster geöffnet werden, in dem Sie Ihre XSL-Transformation durchführen können.get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Wenn Sie sich an das OP halten möchten, lautet die Antwort Nein (wie andere bereits betont haben). Eine Möglichkeit, das Problem zu beheben, besteht darin, einen einfachen Webserver auszuführen und Dateien über http in Chrome zu öffnen. Wenn Sie Python 2.x installiert haben, können Sie einen Webserver ausführen, indem Sie Folgendes eingeben:
Oder in Python 3.x:
und öffnen Sie dann die Datei mit
http://localhost:8000/yourfile.xml
in Chrome. Hoffentlich möchten Sie nur Ihre Arbeit erledigen und es ist nicht entscheidend, dass Sie die Datei mit öffnen müssenfile://
quelle
Das Entschlüsseln auf der Chrome Bug-Seite hat ein wenig gedauert - sie sind sehr daran interessiert, nicht zu erklären, was das Problem ist und warum sie sich dafür entschieden haben, alle zu brechen, anstatt nicht alle zu brechen.
Angenommen, ich habe irgendwo eine XML-Datei auf meiner Festplatte, z.
Und eine böswillige Entität hat es irgendwie geschafft, eine schädliche XML-Datei auf meinem Computer abzulegen, z.
Stellen Sie sich vor, TrojanVirusWorm.xml enthält eine Stylesheet-Verarbeitungsanweisung ( PI ):
Der Angreifer weist dann meinen Browser an, zur lokal gespeicherten
trojanVirusWorm.xml
Datei zu navigieren .Anscheinend gibt es eine Möglichkeit, wie eine XML-Datei den Inhalt der XSD-Datei lesen kann (anstatt von der XSD-Datei transformiert zu werden):
Ich verstehe nicht, wie eine XML-Datei eine Stylesheet-Datei lesen kann. Das Chrome-Team versichert uns jedoch, dass dies eine Gefahr darstellt und nicht gelöst werden kann.
Jeder andere Browser hat es gelöst. Sie haben es gelöst, weil es kein Problem ist .
quelle
Meine Problemumgehung, um eine XML-Datei gemäß einer XLS-Datei anzuzeigen
Angenommen, wir haben eine some_file.xml mit Headern:
https://some-site.com/Common.xsl
und platzieren sie neben demsome_file.xml
href="https://some-site.com/Common.xsl"
nachhref="http://localhost:8001/Common.xsl"
python3 -m http.server 8001
http://localhost:8001/some_file.xml
quelle
Sie können Chrome aktivieren, um die XSL-Datei zu rendern, indem Sie Ihre Browsereinstellungen ändern. Ein sicherer Ansatz wäre der Zugriff über einen lokalen Webserver wie Visual Studio Code Live Server oder Apache. Schritte finden Sie unter XSLT wird in lokalen Dateien nicht gerendert .
quelle