• 締切済み

XMLでこんなの作りたい。

[ 環境 ] OS:WindowsXP Pro PHP:5.3.1 Apache:2.2.14 DBServer:SQLServer2005 EXPRESS [ 質問 ] DB側データ row,level,level_name 0,level1,root 1,level2,admin という様なデータをXMLにて以下の様な表示にしたい。 <?xml version="1.0" encoding="UTF-8" ?> <result> <row row="0"> <level>level1</level> <level_name>root</level_name> </row> <row row="1"> <level>level2</level> <level_name>admin</level_name> </row> </result> この場合、以下のソースをどの様に変更したら良いか アドバイスを頂けたらと思います。 <?php // SQLServerとの接続 require("connect-sqlserver.php"); // XML 生成 $dom = new DOMDocument("1.0"); $node = $dom->createElement("result"); $parnode = $dom->appendChild($node); // MSSQLSERVR への接続セット $db = mssql_connect($server, $userid, $passwd); mssql_select_db($dbName, $db); // [SYSW_LEVEL]テーブルからフィールド情報取得 $query = "SELECT * FROM SYSW_LEVEL"; $res = mssql_query($query, $db); header("Content-type: text/xml"); // XMLへフィールドの値を渡す while ($row = mssql_fetch_assoc($res)) { $node = $dom->createElement("row"); $newnode = $parnode->appendChild($node); $newnode->setAttribute("level", $row['LVL_LEVEL']); $newnode->setAttribute("level_name", mb_convert_encoding($row['LVL_LEVELNAME'],'UTF-8','CP932')); } $dom->encoding="UTF-8"; echo $dom->saveXML(); ?> 以上、よろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

ソース読んでませんし、ご希望の回答ではありませんので、聞き流してください。 PEARに 連想配列を XMLに変換してくれるようなものがあったようななかったようなうろ覚えな記憶があります。 http://itpro.nikkeibp.co.jp/article/COLUMN/20080108/290586/ 実際に使用したことはありませんので、よく分からないのですが。。

関連するQ&A

  • 以下エラーの修正方法についてCall to undefined function domxml_new_doc() in

    PHPを全く扱ったことのない初心者です。 技術者向けカテゴリーに投稿してしまい、誠に恐縮ですが、 エラーの対処方法について私の知識では到底及びませんので どなたかご教授頂けますでしょうか。 以下phpをブラウザでみると、Call to undefined function domxml_new_doc() in とのエラーがでてしまいます。 修正方法を教えて頂けますでしょうか。 どうかよろしくお願い致します。 <?php require("sql-info.php"); $doc = domxml_new_doc("1.0"); $node = $doc->create_element("MLB"); $parnode = $doc->append_child($node); $connection=mysql_connect ($hostname, $username, $password); if (!$connection) { die('Not connected : ' . mysql_error()); } $db_selected = mysql_select_db($database, $connection); if (!$db_selected) { die ('Can\'t use db : ' . mysql_error()); } $query = "SELECT * FROM MLB WHERE 1"; $result = mysql_query($query); if (!$result) { die('Invalid query: ' . mysql_error()); } header("Content-type: text/xml"); while ($row = @mysql_fetch_assoc($result)){ $node = $doc->create_element("marker"); $newnode = $parnode->append_child($node); $newnode->set_attribute("stadium", $row['stadium']); $newnode->set_attribute("lat", $row['lat']); $newnode->set_attribute("lng", $row['lng']); $xmlfile = $doc->dump_mem(); echo $xmlfile; ?>

    • ベストアンサー
    • PHP
  • 取得値の複数使用

    $result = mysql_query("SELECT id, name FROM mytable"); while ($row = mysql_fetch_array($result, MYSQL_NUM)) { $id = mb_convert_encoding($row['id'] , "SJIS", "EUC"); $name = mb_convert_encoding($row['name'], "SJIS", "EUC"); echo $id.":".$name; } 一度DBより取得した値 $resultの中身を複数回使用したいのですが・・・。 毎回、DBにアクセスしないとダメですか?

    • 締切済み
    • PHP
  • GoogleMapsAPIについて

    いろいろと調査をして、試みたのですがうまくいかないため質問させていただきます。 今回、MySQLの位置情報のデータをPHPに渡し、XMLファイルを生成し、GoogleMap上にマーカーを作成しようと考えています。 そこで以下のURLを参考に作成してみたのですが、GoogleMap上にマーカーが表示されません。 http://developers.google.com/maps/articles/phpsqlajax_v3?hl=ja XMLファイルを読み込んでGoogleMap上にマーカーを表示させることができたのですが、phpファイルですとどうもうまくいきません。 アドバイスをいただければ幸いです。 [map.html] <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>Google Maps AJAX + mySQL/PHP Example</title> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>   <script type="text/javascript"> function load() { var map = new google.maps.Map(document.getElementById("map"), { center: new google.maps.LatLng(47.6145, -122.3418), zoom: 13, mapTypeId:google.maps.MapTypeId.ROADMAP }); var infoWindow = new google.maps.InfoWindow; downloadUrl("phpsqlajax_genxml.php", function(data) { var xml = parseXml(data); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var name = markers[i].getAttribute("name"); var address = markers[i].getAttribute("address"); var type = markers[i].getAttribute("type"); var point = new google.maps.LatLng( parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var html = "<b>" + name + "</b> <br/>" + address; var marker = new google.maps.Marker({ map: map, position: point, }); bindInfoWindow(marker, map, infoWindow, html); } }); } function bindInfoWindow(marker, map, infoWindow, html) { google.maps.event.addListener(marker, 'click', function() { infoWindow.setContent(html); infoWindow.open(map, marker); }); } function downloadUrl(url,callback){ var request=window.ActiveXObject? new ActiveXObject('Microsoft.XMLHTTP'): new XMLHttpRequest; request.onreadystatechange=function(){ if(request.readyState==4){ request.onreadystatechange=doNothing; callback(request.responseText,request.status); } }; request.open('GET',url,true); request.send(null); } function parseXml(str){ if(window.ActiveXObject){ var doc=new ActiveXObject('Msxml2.DOMDocument.3.0'); doc.loadXML(str); return doc; }else if(window.DOMParser){ return(new DOMParser).parseFromString(str,'text/xml'); } } function doNothing(){} </script> </head> <body onload="load()"> <div id="map" style="width: 600px; height: 600px"></div> </body> </html> [phpsqlajax_genxml.php] <?php require("sql-info.php"); //スタートXMLファイル、親ノード作成 $dom = new DOMDocument("1.0"); $node = $dom -> createElement("markers"); $parnode = $dom -> appendChild($node); //MySQLサーバへの接続 $connection = mysql_connect('localhost',$username,$password); if(!$connection){ die('Not connected :' . mysql_error()); } //MySQLデータサーバのセット $db_selected=mysql_select_db($database,$connection); if(!$db_selected){ die ('Can\'t use db : ' . mysql_error()); } // テーブルデータの全行列を選択 $query = "SELECT * FROM markers WHERE 1"; $result = mysql_query($query); if (!$result) { die('Invalid query: '. mysql_error()); } header("Content-Type:text/xml; charset=utf-8"); // 各XMLノードへのデータ追加を繰り返す while ($row = @mysql_fetch_assoc($result)){ //XMLドキュメントノードに追加する $node = $dom->createElement("marker"); $newnode = $parnode->appendchild($node); $newnode->setattribute("name", $row['name']); $newnode->setattribute("address", $row['address']); $newnode->setattribute("lat", $row['lat']); $newnode->setattribute("lng", $row['lng']); $newnode->setattribute("type", $row['type']); } echo $dom->saveXML(); ?>

  • 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
  • VBscriptでXMLデータの抽出に関する質問

    教えて下さい。以下のようなXMLファイルがあります。 <?xml version="1.0" encoding="Shift-JIS"?> <ROOT> <INFO> <NO>0001</NO> <NAME>ABC</NAME> <COMMENT> </COMMENT> <AGE>30</AGE> </INFO> </ROOT> これを以下のようにVBScriptにてデータを取り出したいです。 Dim DOM, docRoot, node, nodeList, i, m Dim objADO, objADO2 Dim objRS Dim sqlstmt, strSQL Dim no, comment 'DOMオブジェクト生成 Set DOM = CreateObject("Microsoft.XMLDOM") '同期モード DOM.async = True 'XMLを読み込む DOM.load("11.xml") 'ルートセット Set docRoot = DOM.documentElement 'ノードの設定 Set nodeList = docRoot.selectNodes("/ROOT/INFO") 'ループ For Each node In nodeList For i = 0 to node.ChildNodes.length - 1 Select case node.childNodes(i).nodeName case "NO" no = node.childNodes(i).firstChild.nodeValue case "COMMENT" comment = node.childNodes(i).firstChild.nodeValue End select Next Next ところがCOMMENTタグのようにデータが空のものがあると 「オブジェクトがありません」とエラーになります。 if Not IsNull(node.childNodes(i).firstChild.nodeValue) then というようにもやってみましたが、これでも同じエラーとなってしまいます。 何か方法はないでしょうか?アドバイスを宜しくお願いします。

    • ベストアンサー
    • XML
  • 既存のXMLを別のXMLの要素として追加する方法

    JavaでDOMを使用して、既に作成してあるXMLを別のXMLの要素として追加しようと思っているのですが、なかなか上手くいかないので投稿いたしました。 具体的に以下のような既存のXMLファイルがあると仮定して、 <?xml version="1.0" encoding="UTF-8"?> <a> <b>0</b> <c>1</c> <d>2</d> </a> 上記のXMLの親ノード(逆に言えば、このXMLの子ノードとして上記XMLを追加)にあたるXMLは以下のようになっています。 <?xml version="1.0" encoding="UTF-8"?> <A> </A> そして<A>と</A>の間に既存のXMLを追加して、 <?xml version="1.0" encoding="UTF-8"?> <A> <a> <b>0</b> <c>1</c> <d>2</d> </a> </A> のようにしたいと考えています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • XML::XPath -- 追加したノードが見付からない

    XMLのテンプレートを既存のXMLに追加したのですが、 その後 findnodes() で検索しても合致しません。 XML::XPath::Node::Element->new() を使って作成したものは 合致してくれます。 XML::XPath::XMLParser でパースしたものを追加して findnodes() で合致させるにはどのようにしたらよいのでしょうか。 ------------------------------- use XML::XPath; #### 元のXML my $xmldata = <<EOM; <?xml version="1.0" encoding="UTF-8" ?> <list>   <item>orange</item>   <item>apple</item>   <item>lemon</item> </list> EOM ### 追加するXMLのテンプレート my $xmlappend = <<EOM;   <item>pine</item> EOM ## 追加先ノードを取り出す my $xml = XML::XPath->new( xml=>$xmldata ); my ($list) = $xml->findnodes('/list'); ## 追加用XMLを作成して追加 my $append = XML::XPath::XMLParser->new( xml=>$xmlappend )->parse; $list->appendChild( $append ); ## もういっこ追加。こちらはこの場で作る $newnode = XML::XPath::Node::Element->new('item'); $newtext = XML::XPath::Node::Text->new('banana'); $newnode->appendChild( $newtext ); $list->appendChild( $newnode ); ## 現状確認 → pine は入っていた print $list->toString."\n"; ## item一覧を取得 @nodes = $xml->findnodes('/list/item'); ## 一覧を出力 → 追加した pine が出力されない。 bananaはある。 map{ print $_->toString."\n" } @nodes;

    • ベストアンサー
    • Perl
  • クエリ検索でのWHERE句 HAVING句併用

    (1)元ソースコードに「WHERE category = '%s'」を追加しましたが、クエリ検索でのWHERE句 HAVING句の併用がうまくいきません。 firefoxの要素調査では、ソース改造前には出なかった「HTML ドキュメントの文字エンコーディングが宣言されていません。」のエラーメッセージが出ます。(phpのソースなのにHTMLのエラー?) 原因が分かりましたらお教え願いたく宜しくお願い致します。 元ソースコードに「WHERE category = '%s'」を追加した状態。 // Search the rows in the markers table $query = sprintf("SELECT address, name, lat, lng, category, ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers WHERE category = '%s' GROUP BY distance HAVING distance < '%s' ORDER BY distance LIMIT 0 , 200", mysql_real_escape_string($center_lat), mysql_real_escape_string($center_lng), mysql_real_escape_string($center_lat), mysql_real_escape_string($category)), mysql_real_escape_string($radius)); $result = mysql_query($query); ※ ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) ・・・は入力された住所の緯度経度($center_lat $center_lng)から店(複数任意登録)までの距離を計算する公式 <質問の背景> https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=ja#createmap でselect要素にcategory(店の種類:小売店・食事など)を追加しようと思っています。 上記質問は上記サイトでの「phpsqlsearch_genxml.php」の$query の部分です。 なお、「phpsqlsearch_genxml.php」のソースは下記のとおりです。 <?php require("phpsqlsearch_dbinfo.php"); // Get parameters from URL $center_lat = $_GET["lat"]; $center_lng = $_GET["lng"]; $radius = $_GET["radius"]; // Start XML file, create parent node $dom = new DOMDocument("1.0"); $node = $dom->createElement("markers"); $parnode = $dom->appendChild($node); // Opens a connection to a mySQL server $connection=mysql_connect (localhost, $username, $password); if (!$connection) { die("Not connected : " . mysql_error()); } // Set the active mySQL database $db_selected = mysql_select_db($database, $connection); if (!$db_selected) { die ("Can\'t use db : " . mysql_error()); } // Search the rows in the markers table $query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20", mysql_real_escape_string($center_lat), mysql_real_escape_string($center_lng), mysql_real_escape_string($center_lat), mysql_real_escape_string($radius)); $result = mysql_query($query); if (!$result) { die("Invalid query: " . mysql_error()); } header("Content-type: text/xml"); // Iterate through the rows, adding XML nodes for each while ($row = @mysql_fetch_assoc($result)){ $node = $dom->createElement("marker"); $newnode = $parnode->appendChild($node); $newnode->setAttribute("name", $row['name']); $newnode->setAttribute("address", $row['address']); $newnode->setAttribute("lat", $row['lat']); $newnode->setAttribute("lng", $row['lng']); $newnode->setAttribute("distance", $row['distance']); } echo $dom->saveXML(); ?> (2)上記のエラー原因探すために、都度、プログラム途中での変数の値を表示できれば(javascriptの変数var  PHPの変数$の値など)と思いますが、何か方法はあるものでしょうか。 (phpのflushなどがあるみたいですがHTML全体のどこにどのように記述すればいいのでしょうか。 もしできるなら、私の提示した具体的な上記ソースを例にとっていただければ助かります。)

  • XMLでのAttributeを持ったNodeの追加方法

    VB6にてcreateNodeを使ってXMLを作成しようとしています。 シンプルなXMLは作成できたのですがAttributeを持ったNodeの追加方法が分かりません。 下記のようなXMLファイルを作成しようとしています。 <?xml version="1.0" encoding="utf-8"?> <configuration> <userSettings> <setting name="Color_Unknown_On" serializeAs="String"> <value>True</value> </setting> </userSettings> </configuration> ご教授お願いいたします。

  • ★C#のXML読み込みについて

    以下のXMLをC#(VS2005)で読み込みをしたいのですが、 "DB2", "6"の値を取得するにはどうしたらよいでしょうか? 教えてください。 <?xml version="1.0" encoding="utf-8" standalone="yes"?> <Config> <ConfigKeyValuePair Key="DBType">DB2</ConfigKeyValuePair> <ConfigKeyValuePair Key="Version">6</ConfigKeyValuePair> </Config>

専門家に質問してみよう