- ベストアンサー
JavaScriptを使ってXMLからデータを抽出する方法と実体参照の影響について
- JavaScriptを使用してXMLから条件に合ったデータを抽出し、別のHTMLに書き出す方法についての質問です。
- 質問者は、実体参照を使用するとJavaScriptが動かない現象に遭遇しています。
- 実体参照の箇所を消去すると正常に動作するため、実体参照が影響していることが分かります。なぜ実体参照がJavaScriptの動作に影響を与えるのか、教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
MSXMLがXMLを読み込んで解析する際に,DTD部分がinvalidと判断されてエラーになっているのだと思います。 次のように,validateOnParseプロパティをfalseにしてみたらどうでしょうか。 var objDoc=new ActiveXObject("Msxml2.DOMDocument"); objDoc.validateOnParse = false; //←追加 objDoc.async=false;
その他の回答 (2)
- himajin100000
- ベストアンサー率54% (1660/3060)
メモ: 1.要素型宣言や属性宣言を全部追加しないと当方環境ではエラー(validateOnParse=true) 2.XPath Injectionってのがあって苦労するかもね
お礼
himajin100000さん、ご回答いただきありがとうございます 1.をやってみても改善されなかったような気がするんですが記憶違いかな? XPath Injectionですか!? 便利な機能だと思った実体参照がこうも容易に機能しないなんて結構XMLって不便ですね ご回答ありがとうございました XML初心者ですが、またの質問の際にはよろしくお願いいたします
- nadera
- ベストアンサー率83% (5/6)
(回答1の回答者です) 最初の回答では試してみませんでしたが,次のような簡単な形で試してみて,一応,表示されるようです。 XMLは,質問と同じものです。(encodeは小生の趣味でutf-8にしていますが,本質的な問題ではないと思います。) <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE books[<!ENTITY y2000 "2千円">]> <books> <book id="001"> <title>タイトルA</title> <author>作者A</author> <price>&y2000;</price> </book> </books> HTMLとjavascriptは,次のように簡単にしました。質問と同じものに復元して実行するのが面倒でしたので。 <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script language="javascript" type="text/javascript"> <!-- function disp(){ var objDoc=new ActiveXObject("Msxml2.DOMDocument"); objDoc.validateOnParse = false; objDoc.async=false; objDoc.load("books.xml"); test.innerHTML=objDoc.selectSingleNode("books//price").text; } //--> </script> </head> <body onload="disp()"> <div id="test"></div> </body> </html> XMLとHTMLを同じフォルダにおいてHTMLを表示すると,2千円と表示されると思います。 javascriptの,objDoc.validateOnParse = false;をコメントアウトしてhtmlを表示させるとエラーとなり表示しないはずです。 なので,ENTITYの問題だけであるなら,objDoc.validateOnParse = false;を付け加えれば,表示できるはずなのですが・・
お礼
最初から objDoc.validateOnParse = false が記述されている 他のプログラムでもENTITY宣言して試してみましたが作動しませんでした どうやら、他の原因のようですね またの質問の際はよろしくお願いします どうもありがとうございました
お礼
初めましてnaderaさん! 回答いただきましてありがとうございます ご指摘どおりやってみましたが、残念ながら効果なしです xml fileに<!DOCTYPE books[<!ENTITY y2000 "2千円">]>と宣言して 指定箇所に &y2000; と記述することで間違いはないんですよね xml初心者なもので何が間違っているものなのか見当が付きません 実体参照を記述すると、エラーメッセージが出ることなく、検索ボタンを押しても何の反応もないんです 実体参照を消すと、検索されるんです ちんぷんかんぷんです ご気付きの点がありましたら、また回答いただけるとありがたいです