XML DOMについての質問:PHP側で値を取得できない

このQ&Aのポイント
  • JavaScriptのDOMを使用して、指定のPHPファイルに値を送信しても、PHP側で値を取得できません。
  • JavaScriptでXML DOMを使用して値を作成し、XMLファイルとして送信する部分までは正常に動作しています。
  • しかし、保存したXMLファイルの内容をPHPで取得すると、<?xml version="1.0"?>以降の部分が書き込まれていません。
回答を見る
  • ベストアンサー

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"?>以降書き込みできてません。 どの部分がおかしいか不明の為、申し訳ないですがご教授お願いします。

noname#139568
noname#139568
  • PHP
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

<script type="text/jscript"> /*@cc_on var user_id = 'abc'; var password = 'abc'; var sufix = 'abc'; var doc = new ActiveXObject("Msxml2.DOMDocument.3.0"); var xhr = new ActiveXObject("Msxml2.XMLHTTP.3.0"); var n; if ( doc && xhr ) { doc.loadXML('<?xml version="1.0" encoding="UTF-16"?><xDoc/>'); n = doc.documentElement.appendChild( doc.createElement( 'Command' ) ); n.appendChild( doc.createElement( 'UserID' ) ).appendChild( doc.createTextNode( user_id ) ); n.appendChild( doc.createElement( 'Password' ) ).appendChild( doc.createTextNode( password ) ); n.appendChild( doc.createElement( 'Sufix' ) ).appendChild( doc.createTextNode( sufix ) ); xhr.open( 'POST', '/main/Log.php' ); xhr.setRequestHeader( 'Content-Type', 'text/xml; encoding=UTF-16' ); xhr.setRequestHeader( 'Content-Length', doc.xml.length * 2 ); xhr.setRequestHeader( 'Connection', 'close' ); xhr.onreadystatechange = function () { if ( xhr.readyState == 4 ) { if ( xhr.status >= 400 ) { alert( 'request failed with ' + xhr.status ); } xhr.onreadystatechange = function(){}; xhr = null; } }; xhr.send( doc ); } @*/ </script> <?php $header = apache_request_headers(); if ( preg_match( '%^(application/xml|text/xml)%', $header['Content-Type'] ) ) { $doc = new DOMDocument; $doc->load( 'php://input' ); $doc->save( 'test.xml' ); }

その他の回答 (2)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

#2 どこかミスってる気がするけどまぁいいや。 送るものが数個なら、無理せずにフォームデータあるいは JSONP でよいのでは? selectSingleNode は IE 拡張のため、標準的な DOM には含まれておらず、何度も繰り返すが、PHP の場合 Level 1 までしか実装されていない。 IE と同じことをしたければ、IE(Microsoft) のインターフェースを使ってやればいい。 $doc = new COM('Msxml2.DOMDocument.3.0'); # 金取ろうかな。この程度じゃ無理か。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

ざーと、見ただけだと、まず、このサイトの問題クリアーしていますか? http://q.hatena.ne.jp/1168964473 それに付随して、 >JavaScript とありますが、正確にはIEではJScritでブラウザによって、動作が変わる事がほとんどなので、受け取っている側でちゃんと何が、ゲットできているかデバックコードをいれましょう。それが聞く前の、基本ですよね。

関連するQ&A

  • VB6でXMLを作成しているのですがエラーが出ます

    VB6でXML作成のプログラムを作ったのですが、読み取り専用のノードを編集しようとしましたのメッセージボックスが表示されます。 どなたかどこが悪いのか、ご教授願います。 ソースコードは以下の通りです。 Dim xmlDoc As MSXML.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(3) As IXMLDOMNode '要素 Dim attr As MSXML.IXMLDOMAttribute '属性 Dim newText Set xmlDoc = New MSXML.DOMDocument 'XMLドキュメントを作成します。 'XML宣言を追加します。 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<ClinicalDocument>要素を追加します。 Set node(1) = xmlDoc.createElement("ClinicalDocument") Call xmlDoc.appendChild(node(1)) 'xmlns:xsi属性を追加します。 Set attr = xmlDoc.createAttribute("xmlns:xsi") Call node(1).Attributes.setNamedItem(attr) attr.nodeValue = "http://www.w3.org/2001/XMLSchema-instance" ''ここでエラーが出ます '<Customer>要素を追加します。 Set node(2) = xmlDoc.createElement("Customer") Call node(1).appendChild(node(2)) Call node(2).appendChild(xmlDoc.createTextNode(vbNewLine)) 'id属性を追加します。 Set attr = xmlDoc.createAttribute("id") Call node(2).Attributes.setNamedItem(attr) attr.nodeValue = "1" '<Name>要素を追加します。 Set node(3) = xmlDoc.createElement("Name") Call node(2).appendChild(node(3)) Set newText = xmlDoc.createTextNode("Jhon") Call node(3).appendChild(newText) 'XMLドキュメントの出力 xmlDoc.save (App.Path & "\customer.xml")

  • Load出来ないXMLファイル

    いつもお世話になっております。 標題の件なのですが、VB.NETでXMLファイルから設定情報(Oracleのユーザー名やパスワード等)を取得するプログラムを作成しております。 以下がそのソースコードになります。 ※VB.NET初心者なので、ネットにあったサンプルコードを参考にしました。 --------------------------------------------------   Public Function Setting_init() As Boolean     Dim xmlDoc As New DOMDocument30     Dim Node As IXMLDOMNode     Dim myErr     Dim FileName As String     FileName = "ini.xml"     Const PATH_DTS = "//Settings/Database/DataSource"     Const PATH_UID = "//Settings/Database/UserId"     Const PATH_PSW = "//Settings/Database/Password"     Const PATH_FRM = "//Settings/Path/Form"     Const PATH_OUT = "//Settings/Path/Output"     xmlDoc.async = False     xmlDoc.resolveExternals = False     xmlDoc.load(FileName)          If (xmlDoc.parseError.errorCode <> 0) Then       myErr = xmlDoc.parseError       Setting_init = False     Else       xmlDoc.setProperty("SelectionLanguage", "XPath")       Node = xmlDoc.selectSingleNode(PATH_DTS)       G_DataSorce = Node.text       Node = xmlDoc.selectSingleNode(PATH_UID)       G_UsrId = Node.text       Node = xmlDoc.selectSingleNode(PATH_PSW)       G_PassWord = Node.text       Node = xmlDoc.selectSingleNode(PATH_FRM)       G_FormPath = Node.text       Node = xmlDoc.selectSingleNode(PATH_OUT)       G_OutPath = Node.text       Setting_init = True     End If   End Function -------------------------------------------------- ちなみにXMLファイルの内容は -------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <Settings>  <Database>   <DataSource>Oracleサーバー名</DataSource>   <UserId>ユーザー名</UserId>   <Password>パスワード</Password>  </Database>  <Path>   <Form>フォームが存在するフォルダパス</Form>   <Output>ファイルを出力するフォルダパス</Output>  </Path> </Settings> -------------------------------------------------- となっております。 お客様の環境で実行したら、このプログラムのxmlDoc.load(FileName)の箇所でエラーが出ました。 読み取るXMLファイル内の漢字を除いたら実行できたみたいなのですが、 開発環境ではXMLファイルに漢字を含んでいても問題なくload出来るのです。 端末に依存するのでしょうか? それともこの文字があったらダメというのがあるのでしょうか? 何か情報があればご教示願います。 よろしくお願い致します。

  • phpでxmlが動かない macOsXLion

    phpでxmlの練習をしてるんですが全く動作しません。なんででしょうか? コードを次に書きます。 <?php $doc = new DOMDocument; // DOMDocumentのインスタンス生成 $root = $doc->createElement("cars");  // root要素を作成する $doc->appendChild($root); // docの子としてrootを追加する $elm1 = $doc->createElement("car"); // car要素を作成する $root->appendChild($elm1); // car要素をrootの子として追加する $txt1 = $doc->createTextNode("スポーツカー"); // テキストノードを作成する $elm1->appendChild($txt1); // テキストノードをテキスト要素としてelm1の子として追加する $elm2 = $doc->createElement("car"); // car要素を作成する $root->appendChild($elm2); // rootの子としてcar要素を追加する $txt2 = $doc->createTextNode("トラック"); // テキストノードを作成する $elm2->appendChild(txt2); // elm2にtxt2を追加する print $doc->saveXML(); ?> よろしくお願いします。

    • ベストアンサー
    • PHP
  • VBでXMLファイルを作ると xmlns= が・・・

    VB6でXMLを作成しています。 Dim xmlDoc As New MSXML2.DOMDocument40 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(7) As IXMLDOMNode '要素 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version= ""1.0"" encoding= ""Shift_JIS"" standalone= ""no""")) Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "kml", "")) Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "kmlHeader", "")) Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "kml_DTD", " kml_Version= 2.8"" kml_FileName=""../DTD/HYB01.dtd")) 以下省略 すると <kml_DTD xmlns="kml_Version= 2.8" kml_FileName="../DTD/HYB01.dtd" /> "xmlns=" はどうすれば消えますか?お願いします。

  • vb6 XMLファイル出力について<S></S>

    vb6にてXMLファイル出力のプログラムを作成しています。 XMLファイル内容 <?xml version="1.0" encoding="UTF-8"?> <root> <key>AA</key> <string>aa</string> <key>BB</key> <string/> </root> 上記の<string/>の部分を<string></string>のように出力したいのですが、 どうしても上手くいきません。 下記にソースを記載します。 何か少しでもお分かりになる情報がありましたらご教授願いします。 よろしくお願いします。 Dim xmlDoc As MSXML2.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(50) As IXMLDOMNode '要素 Dim attr As MSXML2.IXMLDOMAttribute '属性 'XMLドキュメントを作成 Set xmlDoc = New MSXML2.DOMDocument 'XML宣言を追加 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<root>要素を追加 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "")) '<key>要素を追加 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(2).Text = "AA" '<string>要素を追加 Set node(3) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(3).Text = "aa" '<key>要素を追加 Set node(4) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(4).Text = "BB" '<string>要素を追加 Set node(5) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(5).Text = "" 'XMLドキュメントの出力 Dim strXMLFile As String strXMLFile = Format(Date, "yyyymmdd") & Format(Time, "hhmmss") xmlDoc.save ("C:TEST\TEST.xml") '終了処理 If Not xmlDoc Is Nothing Then Set xmlDoc = Nothing If Not xmlPI Is Nothing Then Set xmlPI = Nothing

  • XML DOM ルートノード直下に子ノードを持つノードを追加

    XML DOMを利用して、XMLファイルにデータを追加するPHPを書いています。 リファレンス等を参照して、追加は出来るようになったのですが ルートノードが増えていってしまいます。 ::::::::::::::::::::::::::::::::::::::::::::::::::::: define("XMLFILE", "○○.xml"); header("Content-Type: text/html; charset=UTF-8"); $doc = new DOMDocument("1.0","UTF-8"); $doc->formatOutput = TRUE; $doc->load(XMLFILE) or die("ファイルを読み込めません\n"); $record = $doc->createElement("record"); $date = $doc->createElement("date","日付サンプル"); $title = $doc->createElement("title","タイトルサンプル"); $paragraph = $doc->createElement("paragraph","パラグラフ"); $number = $doc->createAttribute("number"); $number->value ="004"; $doc->appendChild($record); $record->appendChild($number); $record->appendChild($date); $record->appendChild($title); $record->appendChild($paragraph); print htmlspecialchars($doc->saveXML(), ENT_NOQUOTES); $doc->save(XMLFILE) or die("ファイルを保存できません。"); :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: どのようにすれば、ルートノードの下に新規ノードが入ってくれるのでしょうか。 どなたか教えて頂けるととても嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • XMLへDOMでタグの追加

    次のようなXMLにDOMで、タグを追加しようとしているのですが、 追加される場所が思った所に追加されません。 正常XMLにようにしたいのですが、どうすれば良いでしょうか? --元XML----------------- <root> <item>a</item> <item>b</item> </root> --結果XML----------------- <root> <item>a</item> <item>b</item> <info>xxxx</info> </root> --正常XML----------------- <root> <info>xxxx</info> <item>a</item> <item>b</item> </root> -- プログラム ---------------- MSXML::IXMLDOMDocumentPtr xmlDoc = NULL; MSXML::IXMLDOMNodeListPtr pNodes; MSXML::IXMLDOMNodePtr pNode; MSXML::IXMLDOMElementPtr pElem; xmlDoc.CreateInstance ("Msxml2.DOMDocument"); xmlDoc->load( ファイル名 ); pNodes = xmlDoc->selectNodes(L"/root"); pNode = pNodes->Getitem(0); pElem = xmlDoc->createElement(L"info"); pNode->appendChild( pElem ); 環境:WinXP+IE7+VC6

    • ベストアンサー
    • XML
  • xmlにファイル出力

    サーバー内dirにある画像ファイルを自動取得してxmlに出力しています。ソース下記。 <?php $doc = new domDocument('1.0'); $doc->formatOutput = true; $root = $doc->createElement('item'); $root = $doc->appendChild($root); $files = glob( '*.jpg'); foreach ($files as $file) { $img = $root->appendChild($doc->createElement('image')); $img->appendChild( $doc->createtextNode($file)); } $doc->save("123.xml"); ?> 実行結果↓↓↓↓ <?xml version="1.0"?> <item> <image>37.jpg</image> <image>43.jpg</image> <image>45.jpg</image> </item> 上記の実行結果を下記の様にしたいのですが?    ↓↓↓↓ <photo url="http://demo/photos/37.jpg" /> <photo url="http://demo/photos/43.jpg" /> <photo url="http://demo/photos/45.jpg" /> よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • VBでXMLファイルを作成していますが、エラーになります

    すみません、教えてください。 VB6でXMLファイルを作成しています。コメントを入れようとすると"!--"の文字でこけます。どうしたらいいのでしょうか?コーディングは以下のようにしてます。 Dim xmlDoc As New MSXML2.DOMDocument40 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(3) As IXMLDOMNode '要素 garFNRpt = sFPass + "Sousinfile\DATA\" + sFilemei + ".xml" 'XML宣言を追加します。 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, """!--""kml基本情報", "")) よろしくお願いします

  • domでのXML作成について

    PHP4.2のdomを使い、下記のようなXMLを作成したいです。 しかし、Itemのノードに対して、NUMBERとNAMEという子ノードを2つつけるやり方が分からず困っています。 PHPは書いて見たのですが、上手くいっていません。 教えていただけると助かります。 宜しくお願いします。 【作成したいXML】 <Response> <Items> <Item> <NUMBER>47</NUMBER> <NAME>沖縄県</NAME> </Item> </Items> </Response> 【PHP】 $dom = domxml_new_doc("1.0"); $Response = $dom->create_element("Response"); $root = $dom->append_child($Response); $Items = $dom->create_element("Items"); $Item = $dom->create_element("Item"); $NUMBER = $dom->create_element("NAME"); $text1 = $dom->create_text_node("47"); $NUMBER->append_child($text1); $NAME = $dom->create_element("NAME"); $text2 = $dom->create_text_node("沖縄"); $NAME->append_child($text2); $Item->append_child($NAME); $Items->append_child($Item); $root->append_child($Items);

    • ベストアンサー
    • PHP

専門家に質問してみよう