- - PR -
分割されたXMLはJavascript内で使用不可能?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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> ============================================================== 作り方に問題があるのか?そもそも不可能なのか? 調べているのですが実際のところよくわかりません 教えていただけるとありがたいのですが… よろしくお願いいたします |
|
投稿日時: 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-16 09:12
MMX様 ありがとうございます
DTDの部分に <!ELEMENT address-cho (#PCDATA)> を追加して試してみます |
|
投稿日時: 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様 ありがとうございました! ============================================================= |
|
投稿日時: 2004-07-16 14:00
XSLT には document関数もあったとは
(常用しないので忘れていました) 独自の XInclude実装 みたいなものか (多階層をしない) [ メッセージ編集済み 編集者: MMX 編集日時 2004-07-16 16:18 ] |
|
投稿日時: 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