PHP+MySQLでXMLを作成し、それをいくつか連結したものを返す方法を教えてください。
HTML
↓(1)httpリクエスト,パラメータ
(2)main.php(XML化メイン処理) XMLデータ送信→ HTML
↑ ↑ ↑
↓ ↓ ↓
(3)xml_1.php xml_2.php xml_3.php(XML生成子処理)
↑ ↑ ↑
↓ ↓ ↓
DB
(2)main.phpでHTMLから受け取ったコマンドを元に生成するXMLの取得を振り分ける。(switch文)
(3)各phpでDBからデータを取得しXML形式にする。
(4)main.phpでそれぞれのXMLを連結し送信。
というのがやりたいことなんですけど、
・SQLからデータを取得し、XMLにする方法
・メイン処理でそれぞれを連結する方法
がわかりません。
main.php
<?php
function xml_main($cmd, &$xml ){
global $log4php,$con,$debugMode;
$result = false;
$dbErrMsg;
// DB Open
openDb();
dbErr();
// log4phpオブジェクト
//$log4php = new log4php('log4php_xml.properties');
// トランザクション開始
mysql_query('BEGIN');
$log4php->debug('トランザクション開始');
/*
try{
// 文字コード変換(ujis=EUC-JP)
// TIPS デフォルトの文字コードがEUCだった場合は以下の二行を削除してください。
$sql = "SET NAMES utf8";
$result = @mysql_query($sql);
}
*/
// XML Header生成
// コマンド毎の呼び出し
switch($cmd){
case 0:
xml_1.phpとxml_2.phpで生成したxmlを連結
break;
case 1:
xml_1.phpとxml_3.phpで生成したxmlを連結
break;
case 2:
xml_2.phpとxml_3.phpで生成したxmlを連結
break;
default:
break;
}
// XML基本情報タグ生成
// XML Footer生成
// DB Close
closeDB();
}
?>
xml_1.php
<?php
function xml_1($id,$member,$msg,&$xml){
//DBからデータを取得
//xmlを作成
}
?>
という感じでやろうとしてるんですが。
xml_1.php xml_2.phpで文字列をreturnしてmain.phpでSimpleXMLで連結させるというのも方法として書いてあったんですが、
具体的なやり方がわかりません。
環境はPHP5.1 MySQL5です。
No.1ベストアンサー
- 回答日時:
結局データベースから投げられたものを、連想配列で取得してきたものを、一度XMLに変換してからXMLデータを連結させるって言うのは、効率悪い気がします。
・それぞれのデータをとりあえず連想配列で取得してきて、配列から一括でXMLに変換する
・それぞれのデータを一本のSQLで取得(JOINしたりUNIONしたり?)してきてそれをXMLにする
といったどっちかの実装をしたほうが良いのではないでしょうか。
という前置きを置きつつ、SimpleXMLでの、XMLデータの作成方法ですが、
<?php
//連想配列でデータベースから値が入ってきている。
$db_data = array(
array('name'=>'tarou', 'age'=>'22', 'mail'=>'hoge@foo.bar'),
array('name'=>'hanako', 'age'=>'41', 'mail'=>'test@example.com'),
);
//オブジェクトを作成
$root = new SimpleXMLElement('<root></root>');
foreach($db_data as $data){
$record = $root->addChild('rec'); //rootにrecordタグを挿入
$record->addChild('name', $data['name']); //recordタグにフィールド要素を挿入
$record->addChild('age', $data['age']); //同上
$record->addChild('mail', $data['mail']); //同上
}
echo $root->asXML();
?>
とすればとりあえずXML文書が作成出来ます。
すでにある二つのXML文書を読んできて連結させる方法に関しても、
結局SimpleXMLに読み込んで、foreachなどで要素ごとにグルグル回して取得してきて、
上記と同様なメソッドを使って新しいXMLに対して再投入する必要があります。
文字列のある部分とある部分をまとめて取得して、連結させる、という実装が出来るようには作られていないと思います。
No.2
- 回答日時:
> ・SQLからデータを取得し、XMLにする方法
[PHP]
$implementation = new DOMImplementation;
$doc = $implementation->createDocument(NAMESPACE, 'records');
$doc->encoding = 'UTF-8';
$root = $doc->documentElement;
$result = mysql_query('SELECT * FROM `table name`', $dbh);
$records = mysql_fetch_assoc($result);
while ($row = mysql_fetch_assoc($result)) {
$record = $root->appendChild($doc->createElementNS(NAMESPACE, 'record'));
foreach ($row as $key => $value) {
$e = $record->appendChild($doc->createElementNS(NAMESPACE, $key));
$e->appendChild($doc->createTextNode($value));
}
}
[/PHP]
はじめから XML に保存しておけば、面倒なことをする必要もない。
>・メイン処理でそれぞれを連結する方法
どうやって連結するのかが指定されていない。だからこそ XSL を使う。
単純に取り込むだけなら XInclude を使ってもいい。
ちなみに、global で書けるものは、大体引数で渡すことができる。
どこで使われて、どこで変化するか分からないものを平気で使えるのか理解できない。
ついでに、@ でエラーを消してしまえる神経も理解できない。
NOTICE や STRICT がうっとおしいなら、出力を切っておけばいい。
まぁ、自分には関係ない。
globalなどは他の処理をしているphpからコピペした際に消し忘れてたみたいです、すいません。
それと、回答いただいたのにポイント振り忘れてたみたいです。申し訳ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- HTML・CSS ホームページのHTMLサイトマップを自動作成する方法を探しています。 1 2023/05/17 21:36
- XML iPhoneでXMLファイルを開くにはどうしたら良いのでしょうか? 1 2022/09/05 18:00
- XML Windowsで見かけるxmlファイルってどういうものですか? 1 2022/06/03 14:57
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
- 数学 この数学問題、スマートに解く方法を教えてください。 3 2023/01/26 23:17
- アプリ おすすめのパスワード管理アプリを教えてください。(iOSとWindows対応) 4 2023/01/19 02:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
RSSデータの読み込み方を教えて...
-
こちらはただの直列処理ですか?
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
VBでメールを送る時のSMT...
-
ワードプレスサイト PHP8.0.25...
-
FTPコマンドでディレクトリごと...
-
アップロード画像数でCSSを分け...
-
二重投稿防止方法
-
PHPのif文でその処理を途中で抜...
-
入力フォームの空白や改行を制...
-
php5のrename()は日本語をリネ...
-
sqlで日付が一番古いデータの月...
-
HYのAM11:00のラップの部分の歌...
-
i18n_convert と mb_convert_e...
-
php 完了画面の送信メールのコ...
-
htmlのエラーについて(デバッグ)
-
PHPExcel処理速度が遅い
-
phpでPEAR::DBを使っているので...
-
URLが.PHPってどういう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php で C言語のdefineマクロの...
-
PHP MySql ページング
-
BASIC認証のユーザー名をPHPで...
-
特定の値をPOST送信で他のサー...
-
cakephpのサブタイトルはどこで...
-
PHPのタイムアウトについて
-
simplexml_load_file で呼び出...
-
phpのエラーについて
-
同一ディレクトリの連番ファイ...
-
「include()」関数の使い方につ...
-
DBから取得した内容を横表示
-
PHPでxmlファイルへのデータの...
-
home_urlとbloginfo('url')
-
PHPとHTMLをまとめてコメントア...
-
Nowdocの機能をphp5.2で使いたい
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
index.phpに入るには、どうすれ...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
おすすめ情報