• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JavaScriptを使うとXMLで実体参照されない)

JavaScriptを使ってXMLからデータを抽出する方法と実体参照の影響について

naderaの回答

  • ベストアンサー
  • nadera
  • ベストアンサー率83% (5/6)
回答No.1

MSXMLがXMLを読み込んで解析する際に,DTD部分がinvalidと判断されてエラーになっているのだと思います。 次のように,validateOnParseプロパティをfalseにしてみたらどうでしょうか。 var objDoc=new ActiveXObject("Msxml2.DOMDocument"); objDoc.validateOnParse = false; //←追加 objDoc.async=false;

taimaiman
質問者

お礼

初めましてnaderaさん! 回答いただきましてありがとうございます ご指摘どおりやってみましたが、残念ながら効果なしです xml fileに<!DOCTYPE books[<!ENTITY y2000 "2千円">]>と宣言して 指定箇所に &y2000; と記述することで間違いはないんですよね xml初心者なもので何が間違っているものなのか見当が付きません 実体参照を記述すると、エラーメッセージが出ることなく、検索ボタンを押しても何の反応もないんです 実体参照を消すと、検索されるんです ちんぷんかんぷんです ご気付きの点がありましたら、また回答いただけるとありがたいです

関連するQ&A

  • (大至急)JavaScriptの質問です

    xmlファイルを読み込んで 書籍1: Title:ハリーポッター ・ ・ 書籍2: Title:広辞苑 ・ ・ 書籍3: ・ ・ のように表示させるJavaScriptのプログラム(拡張子はhtml)を作りたいのですが、上手く行きません。大至急教えて頂けないでしょうか?!本当に困ってます・・・ ///////////作りかけのJavaScriptプログラム//////// <HTML> <script> xmldoc=new ActiveXObject("Microsoft.XMLDOM"); xmldoc.load("Books.xml"); var str=""; var i=0,j=0,imax=0; imax = xmldoc.documentElement.childNodes.length; var Titles = xmldoc.documentElement.getElementsByTagName("Title"); var Authors = xmldoc.documentElement.getElementsByTagName("Author"); var Prices = xmldoc.documentElement.getElementsByTagName("Price"); for(var i=0;i< imax;i++){ str=str+xmldoc.documentElement.childNodes.item(i).text+"<BR />"; document.writeln(str); } </script> <body> </body> </HTML> ///////////作りかけのJavaScriptプログラム//////// ////////////Books.xml////////////// <?xml version="1.0" encoding="SHIFT_JIS" ?> <?xml-stylesheet type="text/xsl" href="kadai3.xsl" ?> <Books> <Book> <Title>ハリーポッター</Title> <Author>j.kローリング</Author> <Price>3800</Price> </Book> <Book> <Title>広辞苑</Title> <Author>鈴木太郎</Author> <Price>6800</Price> </Book> <Book> <Title>魚の図鑑</Title> <Author>田中雅夫</Author> <Price>4500</Price> </Book> </Books> ////////////Books.xml//////////////

  • javascriptとDOMを使ったxmlの読み込みがうまくいかない

    「10日でおぼえるxml入門教室」をいう書籍を使って、xmlの勉強を始めたのですが、ダウンロードした本の内容のソースコードを実行しても想定された結果になりません。そのコードは <html> <head> <title>5-1.XML文書を読み込んでみる</title> <script language="JavaScript"> <!-- var objDoc=new ActiveXObject("Msxml2.DOMDocument"); objDoc.async=false; objDoc.load("books.xml"); window.alert(objDoc.xml); //--> </script> </head> <body> <h1>5-1.XML文書を読み込んでみる</h1> </body> </html> というもので、本来xml文書を表示したダイアログが出るはずなのですが、ブラウザで開いてもダイアログが出ずに、いきなり見出し字が表示されるだけです。 環境はMacOS10.5.5, 使用したブラウザはSafari, Firefox, Operaです。 そもそもIEでないと実行できないコードなのでしょうか? javascriptに関しても初心者なので、できるだけわかりやすい言葉で説明していただけるとありがたいです。

    • 締切済み
    • XML
  • VBScriptを用いたXMLのデータ抽出に関して

    下記のsample.xmlから sample.xml ---------------------------------------------- <?xml version="1.0" encoding="utf-8" ?> <books> <item> <title>XML入門-第1巻</title> <price>2500</price> <isbn>1-1234-5678-X</isbn> <authors> <author>西谷 亮</author> </authors> <imgfile>1-1234-5678-X.gif</imgfile> </item> <item> <title>XML入門-第2巻</title> <price>2200</price> <isbn>1-1234-5678-0</isbn> <authors> <author>西谷 亮</author> <author>山田 太郎</author> </authors> <imgfile>1-1234-5678-0.gif</imgfile> </item> <item> <title>XML入門-第3巻</title> <price>3600</price> <isbn>1-1234-5678-1</isbn> <authors> <author>西谷 亮</author> <author>鈴木 次郎</author> </authors> <imgfile>1-1234-5678-1.gif</imgfile> </item> </books> ---------------------------------------------- 下記のtitle.vbsを用いて、「<title>」タグに表記された 書物のタイトルだけを抜き出します。 title.vbs ---------------------------------------------- 01 : Dim objDOM, rtResult 02 : 03 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument") 04 : rtResult = objDOM.load("Sample.xml") 05 : If rtResult = True Then 06 : procDispDatas objDOM.childNodes 07 : End If 08 : Set objDOM = Nothing 09 : 10 : Sub procDispDatas(objNode) 11 : Dim obj 12 : For Each obj In objNode 13 : If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then 14 : MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue 15 : End If 16 : If obj.hasChildNodes Then 17 : procDispDatas obj.childNodes 18 : End If 19 : Next 20 : End Sub ---------------------------------------------- 上記の記述ではサブプロシージャprocDispDatas(objNode) にて、<title>タグの要素の数だけMsgBoxでタイトル名の メッセージボックスが表示されるかと思います。 これをひとつのメッセージでまとめるて表示するはどのように 記述すればよいでしょうか。 下記のメッセージの表示が理想です。 メッセージ ---------------------------------------------- title:XML入門-第1巻 title:XML入門-第2巻 title:XML入門-第3巻 ---------------------------------------------- お手数をおかけしますが、ご存知の方 ご教授いただけませんでしょうか>< よろしくお願いいたします。

    • 締切済み
    • XML
  • javascriptでXML IEとfireFox

    作成中のホームページで、条件を入力させてその条件に合ったデータ(XMLで管理)を表示する という内容のモノを作ろうとしています。 実際に一通り動く所までは出来たのですが、IEでしか動作せず Firefox等の他ブラウザだと動作しません。 調べてみると、ActiveXObjectが使えないようなのですが どういう方法で実装すると動作するようになるのでしょうか。 よろしくお願いします。 ----------以下ソース一部---------- // ワーク用の XML ドキュメントオブジェクト var objDocWk = new ActiveXObject("Msxml2.DOMDocument.3.0") // 出力用の新しいルートノードを作成 dstNd = objDocWk.createNode(1, "list", "") // XML ドキュメントオブジェクト生成 var objDoc = new ActiveXObject("Msxml2.DOMDocument.3.0") objDoc.async = false objDoc.load("msch.xml") var objRootNode = objDoc.documentElement.childNodes =======================補足======================= 下記のようにやってみたのですが、jsのエラーが起り原因がわからないです。※fireFoxのみIEでは動作確認済 if (window.ActiveXObject) { //for IE // XML ドキュメントオブジェクト生成 var objDoc = new ActiveXObject("Msxml2.DOMDocument.3.0") objDoc.async = false // 曲情報の読込み objDoc.load("msch/msch.xml") // ワーク用の XML ドキュメントオブジェクト var objDocWk = new ActiveXObject("Msxml2.DOMDocument.3.0") } else { //for Firefox // XML ドキュメントオブジェクト生成 var xhttp = new XMLHttpRequest(); xhttp.open("GET", "msch/msch.xml", false); xhttp.send(null); var objDoc = xhttp.responseText; window.alert(objDoc); // ワーク用の XML ドキュメントオブジェクト var xhttp2 = new XMLHttpRequest(); xhttp2.open("GET", "msch/msch.xml", false); xhttp2.send(null); var objDocWk = xhttp2.responseText; window.alert(objDocWk); } // 出力用の新しいルートノードを作成 dstNd = objDocWk.createNode(1, "musiclist", "") // 曲情報のルートノードを取得 var objRootNode = objDoc.documentElement.childNodes エラー内容が objDocWk.createNode is not a function  と objDoc.documentElement is undefined   です。

  • ActionScript3でのXML操作

    ActionScriptの初心者です。お世話になります。 既存のXMLにデータを追加していきたいのですがやり方がわかりません。データは以下のようなフォーマットです。 <books> <book> <title>...</title> <author priority="1">...</author> <!--■authorのpriorityを参照してこの辺に追加したりします--> <author priority="2">...</autor> <book> <books> Web上、adobeのリファレンスでいろいろ探したのですが、ほとんどXMLのデータを参照する方法しか紹介されていません。XMLのデータにタグを追加したり、削除したりする方法、またはWeb上のサンプル等何でもよいので、おしえていただけますでしょうか? または、XMLクラスを使わず行単位で正規表現で文字処理する方法でもかまいません。よろしくお願いします。m(_*_)m バージョン:AcrionScript3.0 (XMLDocumentなどのクラスを使わず、W3Cで定義されているXPathのようなアクセス方法、.とか、@とかでアクセスする方法です。)

    • ベストアンサー
    • Flash
  • XML DOMについて

    JavaScriptでDOMを使用して、xmlhttp.sendで指定のPHPファイルに送信しましたが、 PHP側で値を取得できません。 (PHP Ver.5.3.0) 以下、JavaScript var UserID="abc"; var Password="abc"; var xmlDoc = new ActiveXObject("Microsoft.XMLDom"); xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml","version=\"1.0\"")); var root = xmlDoc.createElement("xDoc"); xmlDoc.documentElement=root; var node_Item = xmlDoc.createElement("Command"); root.appendChild(node_Item); var node_UserID = xmlDoc.createElement("UserID"); node_UserID.appendChild(xmlDoc.createTextNode(UserID)), node_Item.appendChild(node_UserID); var node_Password = xmlDoc.createElement("Password"); node_Password.appendChild(xmlDoc.createTextNode(MDString(Password))), node_Item.appendChild(node_Password); var node_Sufix = xmlDoc.createElement("Sufix"); node_Sufix.appendChild(xmlDoc.createTextNode(Sufix)), node_Item.appendChild(node_Sufix); var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("post",topURL("main/Log.php"),false); xmlhttp.send(xmlDoc); 以下、Log.php <?php session_start(); $DEBUG_MODE=false; $xmlLogQ=$_SERVER['DOCUMENT_ROOT']."/test/temp/Request.xml"; $xml = new DOMDocument(); $xml->async=false; if (!$DEBUG_MODE) { if ($XML_LOG) { $xml->save($xmlLogQ); } } else { if ($XML_LOG) { $xml->load($xmlLogQ); } } $doc=$xml->documentElement; if ($xml->parseError.errorCode==0) { $xml = $node=$doc->selectSingleNode("Command/UserID"); if (!($node==null)) { $UserID=$node->text; $node=null; } $node=$doc->selectSingleNode("Command/Sufix"); if (!($node==null)) { $Sufix=$node->text; $node=null; } $node=$doc->selectSingleNode("Command/Password"); if (!($node==null)) { $Password=$node->text; $node=null; } } ?> 保存したXML上、<?xml version="1.0"?>以降書き込みできてません。 どの部分がおかしいか不明の為、申し訳ないですがご教授お願いします。

    • ベストアンサー
    • PHP
  • javascriptのxml読み込みFireFoxにて

    htmlで外部javascriptを読み込んでxmlの読み込みをしています。 htmlは <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>無題ドキュメント</title> <script language="JavaScript" src="xmlSearch.js"></script> </head> <body onload="display()"> <div id="poem" align="center"></div> </body> </html> です。 javascriptは function display() { if(document.all){ xml_doc = new ActiveXObject("Microsoft.XMLDOM"); }else{ xml_doc = document.implementation.createDocument("", "", null); } xml_doc .async = false; xml_doc.load("flv.xml"); var root = xml_doc.documentElement; var book = root.childNodes; document.getElementById("poem").innerHTML = book.item(0).text; } xmlは <?xml version="1.0" encoding="UTF-8"?> <video> <pass>flv/video1.flv</pass> </video> です。 しかしこれだとFireFoxでは何も表示されません。 どなたか原因が分かる方いませんか?

  • XML を JavaScript で表示したい

    初心者です。XML の属性を JS で表示したいのですが、属性の表示をJSで記入すると属性部分(?)が「null」と表示されるだけで元の XML の内容が正しく反映されません。以下、html のコメントした部分が自分の足したコードですが、何が間違っているのかご教示いただけると有り難いです。宜しくお願いします。 ---XML-[orders.xml]------------------ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE orders SYSTEM "orders.dtd"> <orders> <order> <customerid limit="1000">1111111</customerid> <status>発送済み</status> <item instock="Y" itemid="SA15"> <name>商品名ABC</name> <price>825.00</price> <qty>1</qty> </item> </order> </orders> ---/XML------------------- ---DTD--[orders.dtd]----------------- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE orders SYSTEM "orders.dtd"> <orders> <order> <customerid limit="1000">1111111</customerid> <status>発送済み</status> <item instock="Y" itemid="SA15"> <name>商品名ABC</name> <price>825.00</price> <qty>1</qty> </item> </order> </orders> ---/DTD------------------- ---html--[hoge.html]----------------- <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">​ <html xmlns = "​http://www.w3.org/1999/xhtml">​ <head> <title>A Parser Test</title> <script type="text/javascript"> var tab="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" function printElement(indent, node) { var i; if (node.nodeType == 3) {document.write("<br />" +indent + node.nodeValue); document.write("<br />" +indent + "attributes: "+ node.attributes);} <!--この1行を足しました。誤動作しています(TT)--> else { document.write("<br />" +indent + "[" + node.Name + "]"); for (i = 0; i < node.childNodes.length; i++) { printElement(indent+tab, node.childNodes[i]); } document.write("<br />" +indent + "[/" + node.nodeName + "]"); } } var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("orders.xml") if (xmlDoc.parseError.errorCode != 0) { document.write("<br />Error Code: "); document.write(xmlDoc.parseError.errorCode); document.write("<br />Error Reason: "); document.write(xmlDoc.parseError.reason); document.write("<br />Error Line: "); document.write(xmlDoc.parseError.line); document.write("<br />"); } else { document.write("<strong>ファイルはパーサーを通りました</strong><br />"); document.write("<p /><h1>ツリー構造の表示</h1><p />") printElement("", xmlDoc.documentElement); } </script> </head> <body> </body> </html> ---/html-------------------

  • EXCELVBA XML処理

    こんにちは、 下記のプログラムを作成したのですが、 (すいません、わかりづらいかもしれません。) <DIMENSION Name="E1">内の<HIERARCHY>タグ内にある <PARENT>と<CHILD>の値をセルに貼り付けようとしているのですが、 現在、下記二点で悩んでいまして、何か方法などありましたらお願い致します。 1:<DIMENSION Name="E1">処理のときに、セルにNAMEの値E1を出力  しているのですが、二回表示されてしまう。  (おそらく、<MEMBERS>と<HIERARCHY>と二つタグがあるので  そのせいかと思ったのですが、回避方法が変わりません。) 2:<DIMENSION Name="E1">だけでよいのだが、  <DIMENSION Name="Z1">まで処理を行っている  (<DIMENSION Name="E1">を抜けたという判断方法がわからず・・) VBAコード----------- Option Explicit Dim ia As Long Dim flg As Integer Private Sub CommandButton2_Click() Const cnsTITLE = "テキストファイル読み込み処理" Const cnsFILTER = "全てのファイル (*.*),*.*" Dim xlAPP As Application ' Applicationオブジェクト Dim strXMLFile As String Dim objDOM As MSXML2.DOMDocument Dim rtResult Set xlAPP = Application xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strXMLFile = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _ Title:=cnsTITLE) If StrConv(strXMLFile, vbUpperCase) = "FALSE" Then Exit Sub Set objDOM = New MSXML2.DOMDocument rtResult = objDOM.Load(strXMLFile) If rtResult = True Then ia = 0 flg = 0 procDispDatas objDOM.childNodes Else MsgBox "読み込み失敗" End If Set objDOM = Nothing End Sub Sub procDispDatas(objNode) Dim obj For Each obj In objNode If (obj.parentNode.nodeName = "DIMENSION") Then '<DIMENSION >タグ内処理か判断 If (obj.parentNode.Attributes.getNamedItem("Name").nodeValue = "E1") Then '<DIMENSION Name="E1">タグ内処理か判断 ia = ia + 1 Cells(ia, 1).Value = _ obj.parentNode.Attributes.getNamedItem("Name").nodeValue & " : " flg = 1 End If ElseIf (flg = 1) Then If (obj.parentNode.nodeName = "HIERARCHY") Then '<HIERARCHY>タグ内処理か判断 flg = 2 End If ElseIf (flg = 2) Then If (obj.parentNode.nodeName = "NODE") Then '<NODE>タグ内処理か判断 flg = 3 End If ElseIf (flg = 3) Then Select Case obj.parentNode.nodeName Case "PARENT" '<PARENT>タグ内処理か判断 ia = ia + 1 Cells(ia, 1).Value = _ obj.parentNode.nodeName & " : " & _ obj.nodeValue Case "CHILD" '<CHILD>タグ内処理か判断 ia = ia + 1 Cells(ia, 1).Value = _ obj.parentNode.nodeName & " : " & _ obj.nodeValue Case Else End Select End If If obj.hasChildNodes Then procDispDatas obj.childNodes End If Next End Sub XMLファイル---------- <?xml version = "1.0" encoding="UTF-16" ?> <HSDATA> <DIMENSION Name="E1"> <MEMBERS> <MEMBER> <LABEL>[None]</LABEL> <AT Name="DefCurrency">[None]</AT> <DESCRIPTION Language="English">[None]</DESCRIPTION> </MEMBER> </MEMBERS> <HIERARCHY> <NODE> <PARENT>#root</PARENT> <CHILD>[None]</CHILD> </NODE> <NODE> <PARENT>#root</PARENT> <CHILD>MNG_CN</CHILD> </NODE> </HIERARCHY> </DIMENSION> <DIMENSION Name="Z1"> <HIERARCHY> <NODE> <PARENT>abc</PARENT> <CHILD>123</CHILD> </NODE> <NODE> <PARENT>def</PARENT> <CHILD>456</CHILD> </NODE> </HIERARCHY> </DIMENSION> </HSDATA>

  • JavaScriptの記述を教えて下さい。

    はじめまして、charliehamaといいます。 素人なもので、JavaScriptに詳しい方、教えて下さい。 次のコード(全体の中の一部)があります。 <!-- // ------------------------------------------------- // HTML生成関数 // ------------------------------------------------- function disp(){ //各要素を変数に格納 var $day = $(this).find('day').text(); var $label = $(this).find('label').text(); var $category = $(this).find('category').text(); var $content = $(this).find('content').text(); var $url = $(this).find('url').text(); var $target = $(this).find('target').text(); //HTMLを生成 $('<tr>'+ '<th>'+$day+'</th>'+ '<td class="label"><span class="'+$label+'">'+$category+'</span></td>'+ '<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>'+ '</tr>').appendTo('table.tbl tbody'); } --> 変数$urlについて、if構文で分岐させるにはどのように記述すればよいですか? (1) $urlがxxxの時、<td><span class="abc">'+$content+'</span></td> とする。 (2) $urlがそれ以外の時、<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>とする。 (3) (1)と(2)以外の処理は変更しない。 質問の仕方が悪ければご指摘下さい。 困っています。 どうかよろしくお願い申し上げます。