Detaillierte Erklärung, wie PHP-native DOM-Objekte XML manipulieren

高洛峰
Freigeben: 2023-03-03 22:46:01
Original
1417 Leute haben es durchsucht

Jeder weiß, dass PHP für den Betrieb von XML-Dateien über eine Reihe integrierter DOM-Objekte zur Verarbeitung verfügt. XML-Operationen, vom Erstellen über das Hinzufügen bis hin zum Ändern und Löschen, können mithilfe von Funktionen im DOM-Objekt ausgeführt werden. Der folgende Artikel stellt die Bedienung anhand von Beispielcode vor. Freunde in Not können darauf zurückgreifen.

1. Erstellen

Erstellen Sie eine neue XML-Datei und schreiben Sie einige Daten in diese XML-Datei.

/*
 * 创建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(&#39;event&#39;);//创建节点event
 $text = $dom->createTextNode(&#39;PHP&#39;.$i);//创建文本节点,值为PHP0,PHP1...
 $event->appendChild($text);//将文本节点添加到节点event,做为节点event的值
  
 $attr_obj = $dom->createAttribute(&#39;obj&#39;);//创建属性obj
 $attr_obj->value = $info[$i][&#39;obj&#39;];//为obj属性赋值
 $event->appendChild($attr_obj);//将obj属性添加到event节点中,做为event节点的属性
  
 $attr_info = $dom->createAttribute(&#39;info&#39;);
 $attr_info->value = $info[$i][&#39;info&#39;];
 $event->appendChild($attr_info);
  
 $eventList->appendChild($event);//将event节点添加到根节点EventList中
}
  
//echo $dom->saveXML();
$dom->save(&#39;./t.xml&#39;);//保存信息到当前目录下的t.xml文件中
Nach dem Login kopieren

Das obige Codefragment kann eine XML-Datei erstellen und dieser Datei einige Informationen hinzufügen, einschließlich Werten und Attributen. Die endgültige Datei befindet sich im aktuellen Verzeichnis dabei.

<?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>
Nach dem Login kopieren

2. XML-Informationen lesen und neue Attribute hinzufügen

Die im vorherigen Abschnitt erstellte t.xml-Datei ist das Operationsobjekt, und die Informationen in der t.xml-Datei werden gelesen aus. Und fügen Sie dem Knoten eine neue Attributanzahl mit dem Wert 1 hinzu.

/*
 * 读取xml文件信息,并添加新的属性
 */
  
$dom = new DOMDocument(&#39;1.0&#39;);
$dom->load(&#39;./t.xml&#39;);//加载要操作的文件
$list = $dom->getElementsByTagName(&#39;event&#39;);//获取event节点列表
foreach($list as $item){
 $attr_obj = $item->getAttribute(&#39;obj&#39;);//获取属性obj的值
 $attr_info = $item->getAttribute(&#39;info&#39;);
 echo "<pre class="brush:php;toolbar:false">Object:$attr_obj;Info:$attr_info;Value:{$item->nodeValue}
"; $item->setAttribute('count',1);//添加新的属性count=1 } $dom->save('./t.xml');//保存修改
Nach dem Login kopieren

Sehen Sie sich den extrahierten Wert an:

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
Nach dem Login kopieren

Sehen Sie sich noch einmal den Inhalt der aktuellen t.xml-Datei an. Das count-Attribut wurde hinzugefügt.

<?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>
Nach dem Login kopieren

3. Knotenattribute und Knotenwerte ändern

Die t.xml-Datei im vorherigen Abschnitt ist das Operationsobjekt. Ändern Sie den Zählwert des Knotens, dessen obj-Attribut ist cpu. Der neue Wert ist count+1.

/*
 * 修改某一个节点的属性和值
 */
  
$dom = new DOMDocument(&#39;1.0&#39;);
$dom->load(&#39;./t.xml&#39;);
$list = $dom->getElementsByTagName(&#39;event&#39;);
foreach($list as $item){
 $attr_obj = $item->getAttribute(&#39;obj&#39;);
 if($attr_obj == &#39;cpu&#39;){//修改cpu的count属性,使其值+1
  $attr_count = $item->getAttribute(&#39;count&#39;);//获取count属性的值
  $item->setAttribute(&#39;count&#39;,$attr_count+1);//重置count属性的值
  $item->nodeValue = &#39;Hello,Kitty&#39;;//重置节点的值
 }
}
$dom->save(&#39;./t.xml&#39;);
Nach dem Login kopieren

Die t.xml-Datei nach dem Vorgang sieht wie folgt aus: Sie können sehen, dass das Zählattribut des Knotens mit obj=cpu geändert wurde und der Wert erfolgreich geändert wurde.

<?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>
Nach dem Login kopieren

4. Knoten löschen

Wenn Sie ihn hinzufügen möchten, wird er gelöscht. Die t.xml-Datei im obigen Abschnitt wird als Operationsobjekt verwendet und der Knoten mit obj=disk wird gelöscht.

/*
 * 删除节点
 */
  
$dom = new DOMDocument(&#39;1.0&#39;);
$dom->load(&#39;./t.xml&#39;);
$list = $dom->getElementsByTagName(&#39;event&#39;);
foreach($list as $item){
 if($item->getAttribute(&#39;obj&#39;) == &#39;disk&#39;){//以obj=disk的节点为操作对象
  $item->parentNode->removeChild($item);//删除节点
 }
}
$dom->save(&#39;./t.xml&#39;);
Nach dem Login kopieren

Sehen Sie sich den Inhalt der t.xml-Datei an, nachdem der Vorgang erfolgreich gelöscht wurde.

<?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>
Nach dem Login kopieren

Neuen untergeordneten Knoten zum Stammknoten hinzufügen

Die t.xml im vorherigen Abschnitt wird als Operationsobjekt verwendet und ein neuer untergeordneter Knoten wird zum Stammknoten hinzugefügt Ereignisliste.

/*
 * 向EventList中添加一个子节点
 */
  
$dom = new DOMDocument(&#39;1.0&#39;);
$dom->load(&#39;./t.xml&#39;);
$event_list = $dom->getElementsByTagName(&#39;EventList&#39;);//获取根节点
$event = $dom->createElement(&#39;event&#39;,&#39;lenovo&#39;);//新建节点
$event_list->item(0)->appendChild($event);//将新建节点添加到根节点中
  
$event_attr_obj = $dom->createAttribute(&#39;obj&#39;);
$event_attr_obj->value = &#39;lenovo&#39;;
$event->appendChild($event_attr_obj);
  
$event_attr_info = $dom->createAttribute(&#39;info&#39;);
$event_attr_info->value = &#39;thinkpad t430&#39;;
$event->appendChild($event_attr_info);
  
$dom->save(&#39;./t.xml&#39;);
Nach dem Login kopieren

Sehen Sie sich den Inhalt der t.xml-Datei an, nachdem der neue untergeordnete Knoten in den Stammknoten eingefügt wurde.

<?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>
Nach dem Login kopieren

5. Über item($index)

item(index) ist eine Methode in der DOMNodeList-Klasse. Ihre Funktion besteht darin, einen durch den Index angegebenen Knoten zurückzugeben. Die Methode getElementsByTagName(name) in der Klasse DOMDocument gibt eine Instanz eines DOMNodeList-Objekts zurück, sodass die Methode item(index) direkt aufgerufen werden kann. Nehmen Sie die t.xml im obigen Abschnitt als Beispiel: Wenn e=dom−>getElementsByTagName('EventList') die Informationen des EventList-Knotens abruft, da der EventList-Knoten der Stammknoten ist und es nur einen gibt, also wann es ruft item(index) auf. Der Index ist nur mit index=0 verfügbar, da er nur 1 hat und wenn e=dom−>getElementsByTagName('event') die Informationen des Ereignisknotens erhält, da es 4 Ereignisse gibt Wenn item(index) aufgerufen wird, ist der Index $ index={0,1,2,3}, es stehen 4 Werte zur Auswahl. Jeder Knoten enthält mehrere Attribute, die in Form eines Arrays von Schlüssel-Wert-Paaren ausgedrückt werden können, wie unten gezeigt:

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"
}
Nach dem Login kopieren

kann auch als Attribut eines Objekts verwendet werden, z. B. zum Abrufen des Wert des Knotens:

/*
 * 关于item()
 */
$dom = new DOMDocument(&#39;1.0&#39;);
$dom->load(&#39;./t.xml&#39;);
$e = $dom->getElementsByTagName(&#39;event&#39;);
echo $e->item(2)->nodeValue;
//var_dump($e->item(2));
// $e = $dom->getElementsByTagName(&#39;EventList&#39;);
// var_dump($e->item(0));
//var_dump($e->item(0)->baseURI);
// for($i=0;$i<$e->length;$i++){
//  echo $e->item($i)->nodeValue;
// }
Nach dem Login kopieren

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für jeden hilfreich sein kann, der PHP lernt oder verwendet.


Ausführlichere Erklärungen zur Funktionsweise der nativen DOM-Objekte von PHP mit XML finden Sie auf der chinesischen PHP-Website für verwandte Artikel!


Verwandte Etiketten:
xml
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage