PHP5 は XML サポートを強化し、DOM を使用して XML 操作機能を拡張します。これらの関数は PHP5 コアの一部であり、使用するためにインストールする必要はありません。
次の例は、XML 上の DOM の操作を簡単に示しています。詳細な説明については、コード<?
内のコメントを参照してください。
/***********************************************
** PHP5 で XML を使用する
**参考サイト:
** http://cn.php.net/manual/zh/ref.dom.php
** 次のコードには PHP5 のサポートが必要です
** www.knowsky.com
************************************************/
//まず DOMDocument オブジェクトを作成します
$dom = 新しい DomDocument();
// 次に XML ファイルをロードします
$dom ->load("test.xml");
//XML ファイルを出力します。
//header("コンテンツタイプ: text/xml;charset=gb2312");
//echo $dom -> saveXML();
//XML ファイルを保存します。戻り値は int (バイト単位のファイル サイズ) です。
//$dom -> save("newfile.xml");
echo "<hr/>すべてのタイトル要素を取得します:<hr/>";
$titles = $dom -> getElementsByTagName("タイトル");
foreach ($titles を $node として)
{
echo $node -> textContent 。
//これでもOK
//エコー $node->firstChild->data .
}
/*
echo "<hr/>ルート ノードからすべてのノードを走査します:<br/>";
foreach ($dom->documentElement->childNodes as $items) {
// ノードが要素 (nodeType == 1) で名前が item の場合、ループを継続します
if ($items->nodeType == 1 && $items->nodeName == "アイテム") {
foreach ($items->childNodes as $titles) {
//ノードが要素で名前がタイトルの場合、それを出力します。
if ($titles->nodeType == 1 && $titles->nodeName == "タイトル") {
$titles->textContent を印刷します。 "n";
}
}
}
}
*/
//XPath を使用してデータをクエリする
echo "<hr/>XPath クエリを使用したタイトル ノードの結果:<hr/>";
$xpath = 新しい domxpath($dom);
$titles = $xpath->query("/rss/channel/item/title");
foreach ($titles を $node として)
{
echo $node->textContent."<br/>";
}
/*
これは getElementsByTagName() メソッドの使用に似ていますが、Xpath がより強力で詳細な場合は、次のようになります。
/rss/channel/item[position() = 1]/title は、最初の item 要素のすべての要素を返します。
/rss/channel/item/title[@id = '23'] id 属性を含み、値が 23 であるすべてのタイトルを返します。
/rss/channel/&folder&/title は、すべての記事要素の下にあるタイトルを返します (翻訳者注: &folder& はディレクトリの深さを表します)。
*/
// 新しいデータを DOM に書き込みます
$item = $dom->createElement("アイテム");
$title = $dom->createElement("タイトル");
$titleText = $dom->createTextNode("タイトル テキスト");
$title->appendChild($titleText);
$item->appendChild($title);
$dom->documentElement->getElementsByTagName('channel')->item(0)->appendChild($item)
//DOM からノードを削除します
。
//$dom->documentElement->RemoveChild($dom->documentElement->getElementsByTagName("channel")->item(0));
//または、xpath を使用してノードをクエリし、ノードを削除します
//$dom->documentElement->RemoveChild($xpath->query("/rss/channel")->item(0));
//$dom->save("newfile.xml");
//DOM からノード データを変更します
//最初のタイトルファイルを変更します
// この場所は愚かです。新しいノードを作成して、古いノードを置き換えます。他に良い方法があれば教えてください。
$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
$newTitle = $dom->createElement("タイトル");
$newTitle->appendChild(new DOMText("これが新しいタイトル テキストです!!!"));
$firstTitle->parentNode->replaceChild($newTitle, $firstTitle);
//プロパティを変更する
//$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
//$firstTitle->setAttribute("orderby", "4");
$dom->save("newfile.xml");
echo "<hr/><a href="newfile.xml">View newfile.xml</a>"
//次のコードは php を取得して解析します。 .net のホームページは、最初の title 要素のコンテンツを返します。
/*
$dom->loadHTMLFile(" http://www.php.net/ ");
$title = $dom->getElementsByTagName("タイトル");
print $title->item(0)->textContent;
*/
?>
以下は、test.xml ファイルのコードです:
<?xml version="1.0"coding="gb2312"?>
<rss バージョン="2.0">
<チャンネル>
<title>JavaScript</title>
<リンク>http://blog.csdn.net/zhongmao/category/29515.aspx</link>
<description>javascript</description>
<言語>zh-chs</言語>
<generator>.text バージョン 0.958.2004.2001</generator>
<アイテム>
<クリエイター>中毛</クリエイター>
<title orderby="1">JavaScript を使用して Excel を出力</title>
<リンク>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx</link>
<pubdate>2004 年 9 月 15 日水 13:32:00 gmt</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx</guid>
<コメント>http://blog.csdn.net/zhongmao/comments/105385.aspx</comment>
<コメント>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx#フィードバック</コメント>
<コメント>2</コメント>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/105385.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/105385.aspx</ping>
<description>テストの説明</description>
</アイテム>
<アイテム>
<クリエイター>中毛</クリエイター>
<title orderby="2">JavaScript を使用した出力ワード</title>
<リンク>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx</link>
<pubdate>金曜日、2004 年 8 月 6 日、午後 16 時 33 分 00 秒</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx</guid>
<コメント>http://blog.csdn.net/zhongmao/comments/67161.aspx</comment>
<コメント>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx#フィードバック</コメント>
<コメント>0</コメント>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/67161.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/67161.aspx</ping>
<description>テスト単語の説明</description>
</アイテム>
<アイテム>
<クリエイター>中毛</クリエイター>
<title orderby="3">xmlhttp</title>
<リンク>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx</link>
<pubdate>月曜日、2004 年 8 月 2 日 10:11:00 gmt</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx</guid>
<コメント>http://blog.csdn.net/zhongmao/comments/58417.aspx</comment>
<コメント>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx#フィードバック</コメント>
<コメント>0</コメント>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/58417.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/58417.aspx</ping>
<description>xmlhttpaaa asd bb cc dd</description>
</アイテム>
</チャンネル>
</rss>