• 締切済み

Firefox・GoogleChromeでのxslt読み込み

Firefox・GoogleChromeでのxslt読み込み 現在、xml + xsltでhtmlを生成する試験をしているのですが、 Firefox・GoogleChromeで意図通りの結果にならず悩んでおります。 ソースは下記の通りなのですが、何かアドバイスをいただけたら助かります。 test.xmlとtest.xslを下記のようなフォルダ構成で配置する。 【フォルダ構成】 project |-xml | |-test.xml |-xsl |-test.xsl 【ソース】 test.xml <?xml version = "1.0" encoding = "utf-8"?> <?xml-stylesheet type = "text/xsl" href = "../xsl/test.xsl"?> <tests name = "test"> <test> <tag>aaa</tag> </test> <test> <tag>bbb</tag> </test> <test> <tag>ccc</tag> </test> </tests> test.xsl <?xml version = "1.0" encoding = "utf-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method = "html" encoding = "utf-8" doctype-system = "string" media-type = "text/xml" /> <xsl:template match="/"> <html lang = "ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title><xsl:value-of select = "tests/@name" /></title> </head> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match = "test"> <div> <xsl:value-of select = "tag" /> </div> </xsl:template> </xsl:stylesheet> 【結果】 ・IE・Safari・Opera -> ちゃんと表示してくれる ・Firefox(Ver3.5.3) -> NG   ->・ページタイトル反映されない    ・tagの中身("aaa"・"bbb"・"ccc")が一行に表示されてしまう ・Google Chrome(Ver5.0.342.8 beta) -> NG   ->・何も表示されず、画面真っ白    ・デベロッパーツールでは、"Unsafe attempt to load URL・・・"とエラーが出ている 【備考】 ・『Mozilla で扱えるMIMEタイプは、IEより厳密』みたいな記述を見つけたので、 test.xslの3行目に呪文みたいなのを見よう見真似で書いてみたのですが、 効果なし。というか、この記述があってるのかも分からない。。。 ・Firefoxの場合、同じフォルダにtest.xmlとtest.xslを配置すると ちゃんと表示してくれる。 長々となってしまいましたが、よろしくお願いします。

みんなの回答

回答No.3

ご提示のサンプルコードはローカルファイルをブラウザに読み込ませた場合に、確かにFirefoxとMacOSX版のGoogleChromeでは表示できませんでした。(Windows版のGoogleChromeは表示されました) しかし、Webサーバ上にファイルを配置してhttp://localhost/xml/test.xmlというようにアクセスをするとMacOSX版のGoogleChrome、Firefoxどちらも他のブラウザと同じように表示できました。 Firefoxの場合はローカルファイルアクセスに制限があるようで、XSLTスタイルシートの参照で親フォルダをアクセスしようとするとセキュリティ上の問題によりブロックされるようです。 これは下記手順で解除できます。 URLに about:config と入力。 フィルタに security.fileuri.strict_origin_policy と入れて、検索結果をダブルクリックしtrueをfalseに変更する。 これでFirefoxも親フォルダのXSLTスタイルシートを参照できるようになります。 ローカルファイル参照したい場合は今のところMACOSX版のGoogleChromeは諦めるしかなさそうで、Firefoxは設定変更で対応できるが設定変更が難しいのであれば親フォルダに配置せずXMLファイルと同じフォルダに配置するかサブフォルダに配置すればよいと思います。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

あんまり時間無くてちゃんと確認できてないんだけど mediatypeをxmlとして投げてるから 御丁寧にfirefoxはxmlとして受け取っちゃってるっていうオチの予感・・・

nakaji-_-
質問者

補足

たびたびの返信ありがとうございます。 media-type = "text/html" にしてみたのですが、それでも変わらずで 解決できませんでした。。。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

"/"のmatchからapplyをそのまま投げて"tests"のmatchでやったらどうなるかな

nakaji-_-
質問者

補足

返信ありがとうございます。 アドバイスの意味がイマイチわからなかったのですが、 とりあえず、xsltを下記のように変更してみました。 <?xml version = "1.0" encoding = "utf-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method = "html" encoding = "utf-8" doctype-system = "string" media-type = "text/xml" /> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match = "tests"> <html lang = "ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title><xsl:value-of select = "@name" /></title> </head> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match = "test"> <div> <xsl:value-of select = "tag" /> </div> </xsl:template> </xsl:stylesheet> 結果はまったく変わらずでした。。。 申し訳ないのですが、もう少し具体的にアドバイスを いただけないでしょうか。 よろしくお願いします。