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ランキング
-
php で C言語のdefineマクロの...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
バッチを用いたフォルダの自動移動
-
phpとaspの違いについて
-
form actionで二つ送信先を指定...
-
phpで画像がどうしても文字化け...
-
透過PNGが透過されない!!
-
PHP8を使うと、大量のWarningが...
-
index.phpって何ですか? 具体...
-
PHPで、エラーがない場合のみ画...
-
これの対応OSを教えて下さい。p...
-
ワードプレスサイト PHP8.0.25...
-
PHPからロリポップ!のメールサ...
-
PHPで複数ファイルのダウン...
-
PHPをhtmlに読み込んだファイル...
-
chmod()で所有者が変わってしまう
-
「クラス関数」「メンバ関数」...
-
ファイルアップロードの上限を...
-
ワードプレス、Contact Form 7...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP MySql ページング
-
PHPのタイムアウトについて
-
BASIC認証のユーザー名をPHPで...
-
特定の値をPOST送信で他のサー...
-
php で C言語のdefineマクロの...
-
DBから取得した内容を横表示
-
[wordpress]外部RSSを「文字...
-
検索結果を2列で表示させたい
-
phpヒアドキュメントスクリプト...
-
■■simpleXMLでホットペッパーの...
-
PEARのHTTP_Requestをインストール
-
ヘッダーが付いた場合の、simpl...
-
phpでハイパーリンクして値を持...
-
名前空間のあるXMLからの取り出し
-
同一ディレクトリの連番ファイ...
-
RSSデータの読み込み方を教えて...
-
「include」と「file_get_conte...
-
PHP Mysql SELECTであいまい検...
-
PHP+MySQLでXMLを作成し、それ...
-
PHPでxmlファイルへのデータの...
おすすめ情報