The root cause is Chrome's security policy. The cleanest solution is to use a local web server instead of opening XML files directly from disk.
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xslt"?> <root> <item>Hello World</item> </root> chrome unsafe attempt to load url xslt
cd project python -m http.server 8000 # Open http://localhost:8000/data.xml | Fix | Best for | Difficulty | |-----|----------|------------| | Relative paths | Same folder structure | Easy | | Local web server | Development/testing | Medium | | Disable web security | Quick local test only | Easy (risky) | | CORS headers | Production servers | Medium | | Data URI | Very small XSLT | Hard | The root cause is Chrome's security policy
# Windows chrome.exe --disable-web-security --user-data-dir="C:/chrome_dev" open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev" --disable-web-security Linux google-chrome --disable-web-security --user-data-dir="/tmp/chrome_dev" Solution 4: Enable CORS on Your Server If you control the server hosting the XSLT file, add CORS headers. # Python 3 python -m http
# Python 3 python -m http.server 8000 python -m SimpleHTTPServer 8000
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body> <h2>Items:</h2> <xsl:for-each select="root/item"> <p><xsl:value-of select="."/></p> </xsl:for-each> </body></html> </xsl:template> </xsl:stylesheet>
Header set Access-Control-Allow-Origin "*"