phpでSimpleXMLを使用してXMLファイルを処理する
5324 ワード
1 SimpleXMLの概要
XMLファイルを処理するには、SAXとDOMの2つの従来の処理構想があります.SAXはイベントトリガメカニズムに基づいて、
XMLファイルを一度スキャンし、処理を完了する.DOMはXMLファイル全体を1本のDOMに構築する
ツリーは、DOMツリーの遍歴により処理が完了します.この二つの方法はそれぞれ長所と短所があり、SAXの処理構想は相対的に抽象的である.
DOMの処理過程は相対的に煩雑で、初心者の入門には向いていない.
PHP 5は、SimpleXMLという新しいXML処理関数を発表した.名前は実はSimpleXML自体が小さい
精巧で精巧で、わずかないくつかの方法の関数しか提供していませんが、それを使ってXMLファイルを処理する機能は非常に強く、操作も
とても簡単です.
まず、XMLドキュメント、文字列、またはDOMオブジェクトから直接構築できる簡単な関数を提供します.
SimpleXMLオブジェクト;次に、SimpleXMLは、属性、サブセクションを行う簡単な方法を提供します.
点、およびXPathの操作;しかし、SimpleXMLの最も簡単な点は、標準オブジェクトを使用するプロパティと
オブジェクト反復器によるノード操作の方法は,PHPによるXML文書の処理が極めて大きいと考えられる.
を選択します.
2 SimpleXML入門例
以下、いくつかの小さなコードクリップを通じて、SimpleXMLの強さと簡潔さを少し理解します.例を挙げて便利にするために、
私たちはMessagesを使っています.xmlファイルには、このようなXMLコードが含まれています.
Messages.xml
メッセージ情報が保存されたXMLドキュメントです.各情報には属性id、サブノードtitle、content、timeが含まれています.
および、属性idおよび返信の内容を含む複数の返信情報.
このXMLドキュメントの内容をSimpleXMLで処理して出力する手順と方法は以下の通りです.
(1)SimpleXMLオブジェクトの構築
コード断片
$xml = simplexml_load_file('Messages.xml');
このxmlが文字列$messagesに読み込まれている場合は、次の文を使用します.
コード断片
$xml = simplexml_load_string('Messages.xml');
(2)メッセージ1のタイトルを出力
コード断片
//属性でサブノードにアクセスでき、ノードのラベル名で直接ノードの内容を得ることができる
echo $xml->msg->title;
(3)メッセージ1の最初の返信メッセージを出力する
コード断片
//同レベルの複数の同名ノードが自動的に配列となり、インデックスの下付き文字でコンテンツにアクセスできます
echo $xml->msg->reply[0];
(4)メッセージを出力するid
コード断片
//ノードの属性と値は関連配列のキーと値にカプセル化される
echo $xml->msg['id'];
(5)第2条返信のidを出力する
コード断片
//2 D配列、1 D表示ノード、2 D表示プロパティ
echo $xml->msg->reply[1][ 'id'];
(6)全ての返信のidを順次出力
コード断片
//foreachを使用して同名ノードを巡回
foreach ($xml->msg->reply as $reply){
echo $reply['id'];
}
(7)XPathを用いてすべての返信情報を取得する.
コード断片
//xpathメソッド直接検索位置決め(//任意の深さを表す)
foreach ($xml->xpath('//reply') as $reply){
echo $reply.'';
}
(8)メッセージ1のすべてのサブノードを巡回する.
コード断片
//childrenメソッドはすべてのサブノードを得る
foreach ($xml->msg->children() as $field){
echo $field.'';
}
(9)メッセージ1の配信時間を再設定する
コード断片
//属性の直接設定
$xml->msg->time = '2008-03-21 00:53:12';
(10)返信2のid属性の設定
コード断片
//管理配列の値の設定
$xml->msg->reply[1]['id'] = '222';
(11)メッセージ作成者を記述するフィールドを追加する
コード断片
//属性の直接設定
$xml->msg->author = 'zhangsan';
(12)メッセージの作成者を属性として保存する
コード断片
//関連配列のkey設定
$xml->msg['author'] = 'zhangsan';
(13)ファイルへのオブジェクトの再保存
コード断片
//保存
$xml->asXML('MessagesNew.xml');
SimpleXMLがどれほど簡単かがわかるでしょう.
3例:XMLファイルとデータベース間のデータインタラクション
以下に比較的完全な例を提供して、伝言の情報をMySQLデータベースの中から探し出して、保存して1になります
例のようなXMLファイルです.メッセージメッセージと返信メッセージは2つのテーブルに独立して保存され、MySQL関数パッケージを使用します.
次のように簡単に実現できます.
コードは次のとおりです.
上記のコードの唯一の特筆すべき点は、フラグ1の行です.SimpleXMLオブジェクトに新しい
ノードまたはプロパティを追加する場合は、親ノードが存在することを保証する必要があります.そうしないと、致命的なエラーが表示され、次のメッセージが表示されます.
Objects used as arrays in post/pre increment/decrement must return values by reference.みんなに
この雲を知らないヒントに惑わされてはいけない.読者は上記のコードの理解を通じて、XMLファイルからMySQLまでのコードを対等に書くことができると信じています.
XMLファイルを処理するには、SAXとDOMの2つの従来の処理構想があります.SAXはイベントトリガメカニズムに基づいて、
XMLファイルを一度スキャンし、処理を完了する.DOMはXMLファイル全体を1本のDOMに構築する
ツリーは、DOMツリーの遍歴により処理が完了します.この二つの方法はそれぞれ長所と短所があり、SAXの処理構想は相対的に抽象的である.
DOMの処理過程は相対的に煩雑で、初心者の入門には向いていない.
PHP 5は、SimpleXMLという新しいXML処理関数を発表した.名前は実はSimpleXML自体が小さい
精巧で精巧で、わずかないくつかの方法の関数しか提供していませんが、それを使ってXMLファイルを処理する機能は非常に強く、操作も
とても簡単です.
まず、XMLドキュメント、文字列、またはDOMオブジェクトから直接構築できる簡単な関数を提供します.
SimpleXMLオブジェクト;次に、SimpleXMLは、属性、サブセクションを行う簡単な方法を提供します.
点、およびXPathの操作;しかし、SimpleXMLの最も簡単な点は、標準オブジェクトを使用するプロパティと
オブジェクト反復器によるノード操作の方法は,PHPによるXML文書の処理が極めて大きいと考えられる.
を選択します.
2 SimpleXML入門例
以下、いくつかの小さなコードクリップを通じて、SimpleXMLの強さと簡潔さを少し理解します.例を挙げて便利にするために、
私たちはMessagesを使っています.xmlファイルには、このようなXMLコードが含まれています.
Messages.xml
This is Title
Here is Content
reply 1
reply 2
メッセージ情報が保存されたXMLドキュメントです.各情報には属性id、サブノードtitle、content、timeが含まれています.
および、属性idおよび返信の内容を含む複数の返信情報.
このXMLドキュメントの内容をSimpleXMLで処理して出力する手順と方法は以下の通りです.
(1)SimpleXMLオブジェクトの構築
コード断片
$xml = simplexml_load_file('Messages.xml');
このxmlが文字列$messagesに読み込まれている場合は、次の文を使用します.
コード断片
$xml = simplexml_load_string('Messages.xml');
(2)メッセージ1のタイトルを出力
コード断片
//属性でサブノードにアクセスでき、ノードのラベル名で直接ノードの内容を得ることができる
echo $xml->msg->title;
(3)メッセージ1の最初の返信メッセージを出力する
コード断片
//同レベルの複数の同名ノードが自動的に配列となり、インデックスの下付き文字でコンテンツにアクセスできます
echo $xml->msg->reply[0];
(4)メッセージを出力するid
コード断片
//ノードの属性と値は関連配列のキーと値にカプセル化される
echo $xml->msg['id'];
(5)第2条返信のidを出力する
コード断片
//2 D配列、1 D表示ノード、2 D表示プロパティ
echo $xml->msg->reply[1][ 'id'];
(6)全ての返信のidを順次出力
コード断片
//foreachを使用して同名ノードを巡回
foreach ($xml->msg->reply as $reply){
echo $reply['id'];
}
(7)XPathを用いてすべての返信情報を取得する.
コード断片
//xpathメソッド直接検索位置決め(//任意の深さを表す)
foreach ($xml->xpath('//reply') as $reply){
echo $reply.'';
}
(8)メッセージ1のすべてのサブノードを巡回する.
コード断片
//childrenメソッドはすべてのサブノードを得る
foreach ($xml->msg->children() as $field){
echo $field.'';
}
(9)メッセージ1の配信時間を再設定する
コード断片
//属性の直接設定
$xml->msg->time = '2008-03-21 00:53:12';
(10)返信2のid属性の設定
コード断片
//管理配列の値の設定
$xml->msg->reply[1]['id'] = '222';
(11)メッセージ作成者を記述するフィールドを追加する
コード断片
//属性の直接設定
$xml->msg->author = 'zhangsan';
(12)メッセージの作成者を属性として保存する
コード断片
//関連配列のkey設定
$xml->msg['author'] = 'zhangsan';
(13)ファイルへのオブジェクトの再保存
コード断片
//保存
$xml->asXML('MessagesNew.xml');
SimpleXMLがどれほど簡単かがわかるでしょう.
3例:XMLファイルとデータベース間のデータインタラクション
以下に比較的完全な例を提供して、伝言の情報をMySQLデータベースの中から探し出して、保存して1になります
例のようなXMLファイルです.メッセージメッセージと返信メッセージは2つのテーブルに独立して保存され、MySQL関数パッケージを使用します.
次のように簡単に実現できます.
コードは次のとおりです.
//cong work atWed Mar 20 19:59:04 CST 2008
// MySQL XML
// SimpleXMLElement
//1、 DOM
//$dom = new DOMDocument();
//$dom->loadXML("");
//$xml = simplexml_import_dom($dom);
//2、 xml
//$xml = simplexml_load_file('messages.xml');
//3、
//$xml = simplexml_load_string("");
//4、 SimpleXMLElement
$xml = new SimpleXMLElement('');
//
mysql_connect('localhost','root','root');
mysql_select_db('test');
mysql_query('set names utf8');
//
$rs = mysql_query("select * from messages");
$i = 0; //
while($row = mysql_fetch_assoc($rs)){
$xml->message[$i] = ''; //… … … … … … … … … … … … ①
$xml->message[$i]['id'] = $row['id'];
$xml->message[$i]->title = $row['title'];
$xml->message[$i]->content = $row['content'];
$xml->message[$i]->time = $row['time'];
// id
$rsReply = mysql_query("select * from replies where mid={$row['id']}");
$j = 0; //
while($rowReply = mysql_fetch_assoc($rsReply)){
$xml->message[$i]->reply[$j] = $rowReply['reply'];
$xml->message[$i]->reply[$j]['id'] = $rowReply['id'];
$j++;
}
$i++;
}
$xml->asXML('messages.xml');
?>
上記のコードの唯一の特筆すべき点は、フラグ1の行です.SimpleXMLオブジェクトに新しい
ノードまたはプロパティを追加する場合は、親ノードが存在することを保証する必要があります.そうしないと、致命的なエラーが表示され、次のメッセージが表示されます.
Objects used as arrays in post/pre increment/decrement must return values by reference.みんなに
この雲を知らないヒントに惑わされてはいけない.読者は上記のコードの理解を通じて、XMLファイルからMySQLまでのコードを対等に書くことができると信じています.