PHP原生DOMオブジェクトのXML操作方法について詳しく説明してください。
一、作成
新しいXMLファイルを作成し、このXMLファイルにいくつかのデータを書き込みます。
上記のセクションで作成したt.xmlファイルは操作対象となり、t.xmlファイルの情報を読み出し、ノードに新しい属性countを追加します。その値は1です。
上記のセクションのt.xmlファイルは操作対象です。Obj属性はcpuのノードのcount値であり、新しい値は
追加すると削除されます。上記のセクションのt.xmlファイルは操作対象となり、
前のセクションのt.xmlは、動作対象として、ルートノードEventListに新しいサブノードを追加します。
以上はこの文章の全部の内容です。本文の内容は皆さんの学習やPHPの使用に役に立ちます。もし疑問があれば、メッセージを残して交流してください。
新しいXMLファイルを作成し、このXMLファイルにいくつかのデータを書き込みます。
/*
* xml
*/
$info = array(
array('obj' => 'power','info' => 'power is shutdown'),
array('obj' => 'memcache','info' => 'memcache used than 90%'),
array('obj' => 'cpu','info' => 'cpu used than 95%'),
array('obj' => 'disk','info' => 'disk is removed')
);//
$dom = new DOMDocument('1.0');
$dom->formatOutput = true;//
$eventList = $dom->createElement('EventList');// EventList
$dom->appendChild($eventList);//
for($i = 0; $i < count($info); $i++){
$event = $dom->createElement('event');// event
$text = $dom->createTextNode('PHP'.$i);// , PHP0,PHP1...
$event->appendChild($text);// event, event
$attr_obj = $dom->createAttribute('obj');// obj
$attr_obj->value = $info[$i]['obj'];// obj
$event->appendChild($attr_obj);// obj event , event
$attr_info = $dom->createAttribute('info');
$attr_info->value = $info[$i]['info'];
$event->appendChild($attr_info);
$eventList->appendChild($event);// event EventList
}
//echo $dom->saveXML();
$dom->save('./t.xml');// t.xml
上のコードセグメントはXMLファイルを作成し、このファイルに値と属性を含め、最終的に作成されたファイルは現在のディレクトリの下のt.xmlです。内容を確認してください。
<?xml version="1.0"?>
<EventList>
<event obj="power" info="power is shutdown">PHP0</event>
<event obj="memcache" info="memcache used than 90%">PHP1</event>
<event obj="cpu" info="cpu used than 95%">PHP2</event>
<event obj="disk" info="disk is removed">PHP3</event>
</EventList>
二、XML情報の読み込みと新しい属性の追加上記のセクションで作成したt.xmlファイルは操作対象となり、t.xmlファイルの情報を読み出し、ノードに新しい属性countを追加します。その値は1です。
/*
* xml ,
*/
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');//
$list = $dom->getElementsByTagName('event');// event
foreach($list as $item){
$attr_obj = $item->getAttribute('obj');// obj
$attr_info = $item->getAttribute('info');
echo "<pre>Object:$attr_obj;Info:$attr_info;Value:{$item->nodeValue}</pre>";
$item->setAttribute('count',1);// count=1
}
$dom->save('./t.xml');//
抽出した値を見てください。
Object:power;Info:power is shutdown;Value:PHP0
Object:memcache;Info:memcache used than 90%;Value:PHP1
Object:cpu;Info:cpu used than 95%;Value:PHP2
Object:disk;Info:disk is removed;Value:PHP3
今のt.xmlファイルの内容を見てください。count属性が追加されました。
<?xml version="1.0"?>
<EventList>
<event obj="power" info="power is shutdown" count="1">PHP0</event>
<event obj="memcache" info="memcache used than 90%" count="1">PHP1</event>
<event obj="cpu" info="cpu used than 95%" count="1">PHP2</event>
<event obj="disk" info="disk is removed" count="1">PHP3</event>
</EventList>
三、ノード属性とノード値を変更する上記のセクションのt.xmlファイルは操作対象です。Obj属性はcpuのノードのcount値であり、新しい値は
count+1
です。
/*
*
*/
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');
$list = $dom->getElementsByTagName('event');
foreach($list as $item){
$attr_obj = $item->getAttribute('obj');
if($attr_obj == 'cpu'){// cpu count , +1
$attr_count = $item->getAttribute('count');// count
$item->setAttribute('count',$attr_count+1);// count
$item->nodeValue = 'Hello,Kitty';//
}
}
$dom->save('./t.xml');
動作後のt.xmlファイルは、obj=cpu
のノードのcount属性が変更されたことを確認するために、値も修正されました。
<?xml version="1.0"?>
<EventList>
<event obj="power" info="power is shutdown" count="1">PHP0</event>
<event obj="memcache" info="memcache used than 90%" count="1">PHP1</event>
<event obj="cpu" info="cpu used than 95%" count="2">Hello,Kitty</event>
<event obj="disk" info="disk is removed" count="1">PHP3</event>
</EventList>
四、ノードの削除追加すると削除されます。上記のセクションのt.xmlファイルは操作対象となり、
obj=disk
のノードを削除します。
/*
*
*/
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');
$list = $dom->getElementsByTagName('event');
foreach($list as $item){
if($item->getAttribute('obj') == 'disk'){// obj=disk
$item->parentNode->removeChild($item);//
}
}
$dom->save('./t.xml');
操作後のt.xmlファイルの内容を見て、obj=diskのノードが削除されました。
<?xml version="1.0"?>
<EventList>
<event obj="power" info="power is shutdown" count="1">PHP0</event>
<event obj="memcache" info="memcache used than 90%" count="1">PHP1</event>
<event obj="cpu" info="cpu used than 95%" count="2">Hello,Kitty</event>
</EventList>
ルートノードに新しいサブノードを追加します。前のセクションのt.xmlは、動作対象として、ルートノードEventListに新しいサブノードを追加します。
/*
* EventList
*/
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');
$event_list = $dom->getElementsByTagName('EventList');//
$event = $dom->createElement('event','lenovo');//
$event_list->item(0)->appendChild($event);//
$event_attr_obj = $dom->createAttribute('obj');
$event_attr_obj->value = 'lenovo';
$event->appendChild($event_attr_obj);
$event_attr_info = $dom->createAttribute('info');
$event_attr_info->value = 'thinkpad t430';
$event->appendChild($event_attr_info);
$dom->save('./t.xml');
操作後のt.xmlファイルの内容を見て、新しいサブノードがルートノードに挿入されました。
<?xml version="1.0"?>
<EventList>
<event obj="power" info="power is shutdown" count="1">PHP0</event>
<event obj="memcache" info="memcache used than 90%" count="1">PHP1</event>
<event obj="cpu" info="cpu used than 95%" count="2">Hello,Kitty</event>
<event obj="lenovo" info="thinkpad t430">lenovo</event></EventList>
五、item($index)についてitem(index)
は、インデックスによって指定されたノードを返すためのDOMNodeListクラスの方法である。DOMDocumentクラスのgetElementsByTagName(name)
方法は、ちょうどDOMNodeListオブジェクトの一例であるので、item(index)
方法を直接呼び出すことができる。上記のセクションのt.xmlは一例であり、e=dom−>getElementsByTagName(‘EventList′)
がEventListノードの情報を取得すると、EventListノードはルートノードであり、一つしかないので、item(index)を呼び出すとインデックスはindex=0しか利用できない。一方、e=dom−>getElementsByTagName(‘event′)
がイベントノードの情報を取得すると、イベントが4つあるので、item(index)
を呼び出すと、インデックス$index={0,1,2,3}
は、4つの値が選択できる。各ノードには複数の属性が含まれています。配列に対してキーの形で表現できます。
object(DOMElement)#3 (18) {
["tagName"]=>
string(5) "event"
["schemaTypeInfo"]=>
NULL
["nodeName"]=>
string(5) "event"
["nodeValue"]=>
string(11) "Hello,Kitty"
["nodeType"]=>
int(1)
["parentNode"]=>
string(22) "(object value omitted)"
["childNodes"]=>
string(22) "(object value omitted)"
["firstChild"]=>
string(22) "(object value omitted)"
["lastChild"]=>
string(22) "(object value omitted)"
["previousSibling"]=>
string(22) "(object value omitted)"
["nextSibling"]=>
string(22) "(object value omitted)"
["attributes"]=>
string(22) "(object value omitted)"
["ownerDocument"]=>
string(22) "(object value omitted)"
["namespaceURI"]=>
NULL
["prefix"]=>
string(0) ""
["localName"]=>
string(5) "event"
["baseURI"]=>
string(36) "file:/H:/xampp/htdocs/demo/xml/t.xml"
["textContent"]=>
string(11) "Hello,Kitty"
}
このノードの値を取得するなど、オブジェクトの属性として使用しても良い。
/*
* item()
*/
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');
$e = $dom->getElementsByTagName('event');
echo $e->item(2)->nodeValue;
//var_dump($e->item(2));
// $e = $dom->getElementsByTagName('EventList');
// var_dump($e->item(0));
//var_dump($e->item(0)->baseURI);
// for($i=0;$i<$e->length;$i++){
// echo $e->item($i)->nodeValue;
// }
締め括りをつける以上はこの文章の全部の内容です。本文の内容は皆さんの学習やPHPの使用に役に立ちます。もし疑問があれば、メッセージを残して交流してください。