• 締切済み

JavaScript側でのXML作成の方法

JavaScript側でのXML作成の方法 Ajax開発の経験は始めてなので勝手がわかっていないのですが やりたい事はサーバー側からXMLデータを取得して JavaScript側でXMLを編集してサーバーに書き戻すような事がしたいのです。 このような場合、DOMツリーをXMLファイルにシリアライズするには IEだとActiveXObject("Microsoft.XMLDOM")、FireFoxだとXMLSerializer()を使うと いったようにブラウザごとに処理を分けねばなりません。 これは面倒なのであまりやりたくありません。 あとはベタなテキストとして var xml = "<?xml version='1.0' encoding='utf-8'?>" + "<root><element>test</element></root>" と書いていくくらいしか思いつかないのですが ブラウザ間ごとの違いを吸収してくれる XML編集用の便利なJavaScriptライブラリなどは存在したりするものでしょうか? (jQueryなどがそうのような機能を内包してたりする?) 少し調べてみた限りでは無さそうに感じたのですが 処理としてはよくありそうな事なのでお聞きしてみました。

  • AJAX
  • 回答数3
  • ありがとう数33

みんなの回答

回答No.3

jsontoxmlでググってみると、サンプルコードやjQueryプラグインなどがありそうです。 http://www.google.com/webhp?hl=en#hl=en&source=hp&q=jsontoxml

回答No.2

サーバーから取得したxmlをそのままjQueryに食わせればOK? jQueryのAJAX通信success時に下記のような関数を割り当て。 var ajax_success = function(data, dataType){ //data(xml)の解析結果を取得する。   var xml = jQuery(data);      //<id>test</id>を<id>neko</id>に変更する。   xml.find("id").each(function(){     jQuery(this).text("neko"); });      //xml.html()で変更したxmlをテキストで取得する。 alert(xml.html());//ためしに表示      //サーバーに再度送る場合には、xml.html()で取得したテキストをPOST。 };

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

処理としてはよくありそうな事なのでお聞きしてみました。 ==>全然ありそうじゃ無いですよ。 javascriptは入出力機能はありません。  たとええXMLオブジェクトを作っても、テキストとして表示したり、 サーバーにテキストデータとしてPOSTはできますが...  サーバー側のPHPとかで作った方がよっぽど幸せになります。 ※サーバーから取得したXMLをパースして、HTMLのDOM等に加えたり、 javascriptのJSONにするようなツールはいっぱい見つかるでしょうが....

nisecuroro
質問者

補足

>==>全然ありそうじゃ無いですよ。 >javascriptは入出力機能はありません。 何に対しての入出力のことを指しているのでしょうか? データの取得にXMLを利用している以上 JavaScript側で編集したデータをXMLでサーバに送り返したくなるのは そう不自然な発想ではない気がします。 Google Docやカレンダーのようなアプリは JavaScript側で編集したデータをサーバに書き戻しているはずなので 「ありそうでは無い」ことの根拠がよく分かりません。 >サーバー側のPHPとかで作った方がよっぽど幸せになります。 これはJavaScript側でベタテキストとしてサーバーに送って XMLに整形するのはサーバーサイドのプログラムに任せるということですよね? それも一つの解ではあると思いますが 汎用フォーマットに整形して送ってくれればサーバーサイドは 既存のパーサーに食わせるだけで済むのに対して 妙なフォーマットのテキストをパースする処理を自前で実装することが 何故幸せなのか理解できません。 JSONなら性質上、JavaScriptから生成するのは容易いので サーバーサイドでJSON→XMLに変換処理くらいを書けばいいのかもしれませんが。 その辺りをもう少し詳しくお聞かせ願えないでしょうか

関連するQ&A

  • javaScriptからxmlファイルを読み込みたい。

    strutsで開発を行ってるのですが、javaScriptからweb.xmlに設定してあるsession-timeoutの時間を取得したいのです。 javaScriptからxmlファイルをparseできるみたいで、ネットを参考に書いてみたのですが。うまく動きません・・・以下がソースです。 jsファイルをweb.xmlと同じ階層において試したのですが 、うまく読み込めていないようなのです。どなたかご教授お願いできないでしょうか? javaScriptからweb.xmlを読み込むことは不可能なのでしょうか? ちなみにブラウザはIE6.0以上限定です。 function readXML(){ xml_doc = new ActiveXObject("Microsoft.XMLDOM"); xml_doc.async = false; if(xml_doc.load("web.xml")){ alert("success!"); }else{ alert("error!"); } }

  • Javascriptでxmlファイルを読み込もうとしているのですがXP

    Javascriptでxmlファイルを読み込もうとしているのですがXPではできたのですがVistaで実行したら以下の部分が動作しないようです。セキュリティなどの設定などが問題なのでしょうか?改善方法がありましたら教えてください。 doc = ActiveXObject("Microsoft.XMLDOM");

  • JavaScriptによるXML読み込み

    ASP.Netである操作をした際、JavaScriptのリソースファイル(JSファイル)のXML読み込み関数を呼び、XMLデータを取得しようとしていますがうまくいく場合といかない場合があり困っています。 XMLのloadでエラーとなっているようなのですがその原因と対処法がわかりません。 どうか詳しい方がいましたら教えて下さい。 ちなみにソースは以下の通りです。 ---------------------------------------------------- var objXML = new ActiveXObject('microsoft.XMLDOM'); objXML.async = false; objXML.load('../../../XMLFile/XMLファイル名'); ---------------------------------------------------- parseError情報ではエラーコードが"-2146697210"です。 load関数でうまくいったりいかなかったりです。 ちなみにXMLファイルは上記のように相対パス指定で行ってます。 以上、お願いします。

  • 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では何も表示されません。 どなたか原因が分かる方いませんか?

  • 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
  • SQL ServerのXMLスキーマがうまくいきません。

    「SQL Server 2005 Express」を使用しています。 次のようなスキーマをサーバーに登録して CREATE XML SCHEMA COLLECTION dbo.schema_test AS N'<?xml version="1.0" encoding="UTF-16"?> <xsd:schema targetNamespace="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="root">  <xsd:complexType mixed="true">   <xsd:choice>    <xsd:element name="A" type="xsd:string" />    <xsd:element name="B" type="xsd:string" />    <xsd:element name="C" type="xsd:string" />   </xsd:choice>  </xsd:complexType> </xsd:element> </xsd:schema>' ; つぎのようなクエリを試したのですが、 「メッセージ 6913、レベル 16、状態 1、行 5 XML 検証: 要素 'root' の宣言が見つかりませんでした。場所: /*:root[1]」 というエラーメッセージが表示されてしまいます。 DECLARE @xml xml (dbo.schema_text) SET @xml = '<root> <A>AAA</A> <B>BBB</B> <C>ooo</C> </root> ' どなたか分かる方がいらっしゃいましたら、 アドバイスをお願いいたします。

  • XML DOM XMLパーサーについて理解していません

    XMLについてイマイチ理解していないので教えてください。PHPでXMLファイルを開いて何らかの処理をするとします。例えば <?php //ドキュメントオブジェクトの作成 $doc = new DOMDocument(); //XML 文書ファイルのパース(DOM ツリーの作成) $doc->load("docs/td101.xml") //要素"b"を取得する $bElement = $doc->getElementsByTagName("b")->item(0); //取得した要素"b"に属性"ad"を設定する $bElement->setAttribute("ad","Fukuoka"); //ドキュメントをシリアライズする $doc->save("docs/result101.xml"); ?> のようにXMLファイルに属性を追加するという処理を行うとします。この時、DOMはPHPによって生成されるんでしょうか?またXMLはXMLパーサーによって解析されると本で読んだのですが、この場合PHPがXMLパーサーの機能を持っているんでしょうか?それともブラウザにXMLパーサーの機能があり、ブラウザ側で処理をされているのでしょうか?意味がわからなくて申し訳ないですが、この辺りを理解していなくて・・・御願いいたします。

    • ベストアンサー
    • XML
  • 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
  • ActiveXObjectで取得したXMLの解析処理ができない

    Ajaxの勉強をしているのですが困っています。 ActiveXObjectで取得したXMLの解析処理ができないのです。 1.JavaScriptで新たにActiveXObjectのオブジェクトを作成 (例)var obj = ActiveXObject(Msxml2.XMLHTTP); 2.上記オブジェクトに対しopen(),send()を行う。 (例)obj.open(callback,url,false); 3.サーバーにてリクエスト受信後、JSP上に記述したXMLを送信。 4.上記オブジェクトに対しresponseXMLを行う。 (例)var doc = obj.responseXML; 5.XMLの要素を取得 (例)doc.getElementsByTagName("name"); 4の結果何らかのオブジェクトは取れているようなのです(alertで表示してみると"[Object]"と表示される。)が、実際に5でXML中の要素を取ろうとすると何も取得できません。一方4をobj.responseText;とすると、(alertで表示してみると文字化けしていますがXMLの)内容が取得できます。 なぜレスポンスをXMLにして取得した場合、情報を取得できないのでしょうか?ご教授いただけませんでしょうか? よろしくお願いいたします。

    • 締切済み
    • PHP
  • xml+xslでの変換内容をtextareaへ

    お世話になります。 xml+xslでhtmlに変換する際、その変換内容をtextareaにも表示させるようにしたいのです。 使用ブラウザ:FireFox。現状はFirebugでDOMツリーを手動で参照してる状況です。 現在は、ノードをtextareaに表示しようとすると[object DocumentFragment]とだけ出てしまい、DocumentFragmentという概念あることは分かり、色々調べcreateElement()やcreateTextNode()など、その他思いつく限りの事でテストしてみてるのですが、どうにもノードをHTMLタグとしてtextareaに表示させる事が出来ません。 以下にポイントとなるソースを掲示しますので、どなた様か、お助け願えませんでしょうか --test.html---- <html><head> <meta content="text/html; charset=utf8" http-equiv="content-type"> <title>JS+xslt</title> <script type="text/javascript"> function tramsformlists(xmlFile, xslFile, resultNodeID){ var xml, xslt, newDoc; if(document.all){ xml = new ActiveXObject("Microsoft.XMLDOM"); xslt = new ActiveXObject("Microsoft.XMLDOM"); }else { xml = document.implementation.createDocument("", "", null); xslt = document.implementation.createDocument("", "", null); } xml.async = false; xslt.async = false; xml.load(xmlFile); xslt.load(xslFile); if(document.all){ document.getElementById(resultNodeID).innerHTML = xml.transformNode(xslt); }else { var xsltp = new XSLTProcessor(); xsltp.importStylesheet(xslt); newDoc = xsltp.transformToFragment(xml, window.document); var df = document.createDocumentFragment(); cloneDoc= newDoc.cloneNode(true); document.getElementById("Div"+resultNodeID).innerHTML = ""; document.getElementById("Div"+resultNodeID).appendChild(newDoc); t = document.msg_form.TextareaTest.value; document.msg_form.TextareaTest.value =t + df.appendChild(cloneDoc); } } </script> </head><body> <form name="msg_form"> <ul> <li> <input type="button" value="Menu" onclick="tramsformlists('test0.xml','test0.xsl','Test')"><br> <div id="DivTest"></div> <textarea cols="50" rows="10" id="TextareaTest">あああああああ</textarea> </li> </ul> </form> </body></html> --test0.xml-- <?xml version="1.0" encoding="utf-8"?> <root> <nolink_logo> </nolink_logo> </root> --test0.xsl-- <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="utf-8"/> <xsl:template match="root"> <xsl:apply-templates select="nolink_logo"/> </xsl:template> <xsl:template match="nolink_logo"> <xsl:call-template name="Test" /> </xsl:template> <xsl:template name="Test"> <xsl:variable name="menu" select="document('test1.xml')/root"/> <div>画像を表示 <xsl:for-each select="$menu"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="url[1]"/> </xsl:attribute> <xsl:attribute name="target">_blank</xsl:attribute> <xsl:element name="img"> <xsl:attribute name="src"> <xsl:value-of select="img[1]"/> </xsl:attribute> </xsl:element> </xsl:element> </xsl:for-each> </div> </xsl:template> </xsl:stylesheet> --test1.xml-- <?xml version="1.0" encoding="utf-8"?> <root> <img>http://domain/image2.gif</img> <url>http://domain/test.html</url> </root>

専門家に質問してみよう