みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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を配置すると
ちゃんと表示してくれる。



長々となってしまいましたが、よろしくお願いします。

投稿日時 - 2010-04-06 21:40:50

QNo.5807673

困ってます

このQ&Aは役に立ちましたか?

18人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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ファイルと同じフォルダに配置するかサブフォルダに配置すればよいと思います。

投稿日時 - 2010-05-03 16:29:04

ANo.2

あんまり時間無くてちゃんと確認できてないんだけど

mediatypeをxmlとして投げてるから 御丁寧にfirefoxはxmlとして受け取っちゃってるっていうオチの予感・・・

投稿日時 - 2010-04-09 00:05:18

補足

たびたびの返信ありがとうございます。

media-type = "text/html"

にしてみたのですが、それでも変わらずで
解決できませんでした。。。

投稿日時 - 2010-04-10 00:20:31

ANo.1

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

投稿日時 - 2010-04-06 22:57:26

補足

返信ありがとうございます。

アドバイスの意味がイマイチわからなかったのですが、
とりあえず、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>


結果はまったく変わらずでした。。。
申し訳ないのですが、もう少し具体的にアドバイスを
いただけないでしょうか。

よろしくお願いします。

投稿日時 - 2010-04-07 20:04:59

あなたにオススメの質問