- PR -

分割されたXMLはJavascript内で使用不可能?

1
投稿者投稿内容
テツ
会議室デビュー日: 2004/07/15
投稿数: 3
投稿日時: 2004-07-15 18:32
XMLで住所録的なものを作成していますが、個人別にXMLファイルを分割し、
全体をまとめるXMLファイルを以下のように作成したところ…
==============================================================
 merge.xmlファイル内容
==============================================================
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE address-cho [
<!ENTITY a0001 SYSTEM "y-sato.xml">
<!ENTITY a0002 SYSTEM "k-yamamoto.xml">
<!ENTITY a0003 SYSTEM "m-kimura.xml">
]>
<address-cho>
&a0001;
&a0002;
&a0003;
</address-cho>
================================================
 実行結果

 @ このままブラウザで表示 … OK
 A これにXSL定義を追加して表示 … OK
 B Javascriptなかで使用 … NG

Javascript部分は以下のように innerHTML を用いて
動的にXSLを変更していたのですが
merge.xmlが内部で展開されてくれないように思えるのです
==============================================================
<xml id="test_xml" src="merge.xml"></xml>
<xml id="test1" src="test1.xsl"></xml>
<xml id="test2" src="test2.xsl"></xml>

<script language="JavaScript">
<!--
function testOne() {
kekka.innerHTML = test_xml.transformNode(test1.documentElement);
}
function testTwo() {
kekka.innerHTML = test_xml.transformNode(test2.documentElement);
}
-->
</script>
==============================================================
作り方に問題があるのか?そもそも不可能なのか?
調べているのですが実際のところよくわかりません
教えていただけるとありがたいのですが…

よろしくお願いいたします
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-07-16 00:10
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE address-cho [
<!ELEMENT address-cho (#PCDATA)>
<!ENTITY a0001 "y-sato.xml">
<!ENTITY a0002 "k-yamamoto.xml">
<!ENTITY a0003 "m-kimura.xml">
]>
<address-cho>
------------------------------------000
&a0003;&a0002;&a0001;
</address-cho>
===========================
<HTML><HEAD><TITLE>SRC</TITLE></HEAD>
<xml id="test_xml" src="merge.xml"></xml>
<BODY onLoad="javascript:kekka.innerHTML = test_xml.XMLDocument.documentElement.text;">
--
<P id="kekka">
####
</P>
</BODY></HTML>
=========================
なんとなく、動いていますが

[ メッセージ編集済み 編集者: MMX 編集日時 2004-07-16 00:26 ]
テツ
会議室デビュー日: 2004/07/15
投稿数: 3
投稿日時: 2004-07-16 09:12
MMX様 ありがとうございます

DTDの部分に
<!ELEMENT address-cho (#PCDATA)>
を追加して試してみます
テツ
会議室デビュー日: 2004/07/15
投稿数: 3
投稿日時: 2004-07-16 13:44
> XML文書 ≠ XMLデータアイランド なので、そうなのでは

というコメントも頂いたので、上記とは異なるやり方を見つけることができ
<xsl:for-each 〜>を使用する方法で以下のようにしたところ想定どおりに
「ひとかたまり」で扱うことが出来ました

JavaScriptのなかでXSLを動的に切り替えてみましたが結果はOKでした!
=============================================================
 merge.xmlファイル内容
=============================================================
<?xml version="1.0" encoding="Shift_JIS" ?>
<address-cho>
<personal-data href="y-sato.xml" />
<personal-data href="k-yamamoto.xml" />
<personal-data href="m-kimura.xml" />
</address-cho>
=============================================================
 merge.xslファイル内容
=============================================================
<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xml"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><head></head><body>
<xsl:for-each select="document(address-cho/personal-data/@href)/personal-data">
<xsl:apply-templates select="テンプレート名" />
</xsl:for-each>
</body></html>
</xsl:template>
</xsl:stylesheet>
=============================================================
 MMX様 ありがとうございました!
=============================================================
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-07-16 14:00
XSLT には document関数もあったとは
(常用しないので忘れていました)
独自の XInclude実装 みたいなものか
(多階層をしない)

[ メッセージ編集済み 編集者: MMX 編集日時 2004-07-16 16:18 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-07-17 00:30
最初の 方式(エンティティ参照)でも うまく行くようです
ただ XMLデータアイランドは DTD 検証オンで パースするようです
ちゃんと 要素宣言していないとダメでした。
ブラウザ表示では DTD検証オフとちょっと違う。

<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE address-cho [

<!ELEMENT address-cho ANY>
<!ELEMENT personal-data (#PCDATA)>

<!ENTITY a0001 SYSTEM "y-sato.xml">
<!ENTITY a0002 SYSTEM "k-yamamoto.xml">
<!ENTITY a0003 SYSTEM "m-kimura.xml">
]>
<address-cho>
&a0003;&a0002;&a0001;
</address-cho>
===================================--
<personal-data>y-sato.xml</personal-data>
・・・・・
でちゃんと展開できました。
1

スキルアップ/キャリアアップ(JOB@IT)