XML+XSLでHTMLを生成する上で、PHPを経由する場合と、しない場合で、
外部エンティティの挙動が異なっていて悩んでいます。
具体的には、
・XML+XSL+外部エンティティ → 意図通りHTML生成
・PHP+XML+XSL+外部エンティティ → 意図通りHTML生成されない(外部エンティティが生成されない)
こういうものなのでしょうか?
もし、こういう仕様であれば、なにか対応策はあるのでしょうか?
ソースと生成されたHTMLは下記の通りです。
【Though.php】
<?php
header( 'Content-Type: text/html; charset=UTF-8' );
$xml = new DomDocument();
$xml->load( 'MainData.xml' );
$xsl = new DomDocument();
$xsl->load('Main.xsl');
$processor = new xsltprocessor();
$processor->importStyleSheet($xsl);
echo $processor->transformToXML($xml);
?>
【MainData.xml】
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="Main.xsl" ?>
<!DOCTYPE books [
<!ENTITY sub_data SYSTEM "SubData.xml">
]>
<root>
<node1>TEST1</node1>
<node2>&sub_data;</node2>
</root>
【Main.xsl】
<?xml version = "1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<xsl:apply-templates />
</html>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
【SubData.xml】
<?xml version="1.0" encoding="utf-8"?>
<sub_data>Test2</sub_data>
【XML+XSL+外部エンティティで生成されるHTML(ブラウザで直接MainData.xmlを開いた場合)】
<html><?xml-stylesheet type="text/xsl" href="Main.xsl" ><root><node1>TEST1</node1><node2><sub_data>Test2</sub_data></node2></root></html>
【PHP+XML+XSL+外部エンティティで生成されるHTML(ブラウザでThrough.phpを開いた場合)】
<html>
<?xml-stylesheet type="text/xsl" href="Main.xsl" ><root>
<node1>TEST1</node1>
<node2></node2> //←node2の中がカラッポになっている。。。
</root>
</html>
※生成されたHTMLは、IE8の開発者ツールで確認しています。
XMLやPHPは最近やり始めたのでトンチンカンなことを言ってるかもしれませんが、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php エラー
-
文字化けについて
-
日付と年月日を選択するコード...
-
XAMPP1.7.1上でPHPを実行すると...
-
POP3を使ったメール受信で...
-
PHPのif文でその処理を途中で抜...
-
「@$変数」の「@の意味は?」
-
PHPで新しいウインドウで開く命...
-
FTPコマンドでディレクトリごと...
-
VBSの「MsgBox」について
-
トランザクションが原因?DBに...
-
「クラウドにアップロード」」...
-
レジストリにあるアプリケーシ...
-
is_fileでファイルが存在してい...
-
xamppでformによるデータの送信...
-
glob関数で日本語文字が取得で...
-
Struts2 ファイルアップロード
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
「クラス関数」「メンバ関数」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付と年月日を選択するコード...
-
複数の文字列をファイルに書き...
-
前後の全角スペースを削除する...
-
XAMPP1.7.1上でPHPを実行すると...
-
文字化けについて
-
PHP(smarty)についての質問(文...
-
ファイルをアップロードすると...
-
php エラー
-
条件によってmeta http-equiv="...
-
ウィンドウA⇒ウィンドウB⇒ウィ...
-
html内のphpスクリプトについて
-
Wordpressを利用したソート機能...
-
エラー Warning: Cannot modif...
-
phpの画面表示が真っ白です
-
<form action="bbs.php" method...
-
mb_convert_variablesで変換出...
-
phpでfopen()やfputs()が使えない
-
XMLパースエラー回避方法
-
header関数について
-
PEARのXML/Unserializer.phpが...
おすすめ情報