Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert Methoden für native DOM-Objekte zur Manipulation von XML

PHP implementiert Methoden für native DOM-Objekte zur Manipulation von XML

墨辰丷
墨辰丷Original
2018-05-31 16:13:501278Durchsuche

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 Sie

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文件中

Der obige Codeausschnitt kann eine XML-Datei erstellen und dieser Datei einige Informationen hinzufügen, einschließlich Werten und Attributen. Die endgültige Datei ist das aktuelle Verzeichnis t.xml unten können Sie einen Blick auf den Inhalt werfen.

<?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>

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

Über einem Die t Die im Abschnitt erstellte .xml-Datei ist das Operationsobjekt. Die Informationen in der t.xml-Datei werden ausgelesen und dem Knoten wird eine neue Attributanzahl mit dem Wert 1 hinzugefügt.

/*
 * 读取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');//保存修改

Sehen Sie sich die extrahierten Werte 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

Schauen Sie sich den Inhalt der aktuellen t.xml-Datei noch einmal 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>

3. Knotenattribute und Knotenwerte ändern

Wie im Der obige Abschnitt Die t.xml-Datei ist das Operationsobjekt. Ändern Sie das obj-Attribut so, dass es der Zählwert des CPU-Knotens 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;);

Die t.xml-Datei sieht nach dem Vorgang wie folgt aus: Sie können sehen, dass das Zählattribut des Knotens

geändert wurde wurde erfolgreich geändert. obj=cpu

<?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>

4. Knoten löschen

Wenn Sie es hinzufügen möchten, wird es gelöscht werden. Löschen Sie den Knoten

, indem Sie die Datei t.xml im obigen Abschnitt als Operationsobjekt verwenden. obj=disk

/*
 * 删除节点
 */
 
$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;);

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>

Fügen Sie einen neuen untergeordneten Knoten zum Stammknoten hinzu

Die t.xml im vorherigen Abschnitt ist das Operationsobjekt. Fügen Sie es hinzu Der Wurzelknoten EventList Fügt einen neuen untergeordneten Knoten hinzu.

/*
 * 向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;);

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>

5. Über item($index)

ist DOMNodeList Eine Methode in einer Klasse, die einen durch ihren Index angegebenen Knoten zurückgibt. Die item(index)-Methode in der DOMDocument-Klasse gibt eine Instanz eines DOMNodeList-Objekts zurück, sodass die getElementsByTagName(name)-Methode direkt aufgerufen werden kann. Nehmen wir als Beispiel die t.xml im obigen Abschnitt: Wenn item(index) die Informationen des EventList-Knotens abruft, gibt es nur einen, da der EventList-Knoten der Stammknoten ist. Wenn also item (Index) aufgerufen wird, ist der Index der Index ist nur index=0, weil es nur 1 gibt; und wenn e=dom−>getElementsByTagName(‘EventList′) die Informationen des Ereignisknotens abruft, weil es 4 Ereignisse gibt, hat der Index e=dom−>getElementsByTagName(‘event′) beim Aufrufen von item(index) 4 Werte wählen Sie aus. Jeder Knoten enthält mehrere Attribute, die in Form eines Arrays von Schlüssel-Wert-Paaren ausgedrückt werden können, wie unten gezeigt: $index={0,1,2,3}

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"
}

kann auch als verwendet werden ein Objekt Verwenden Sie beispielsweise die Attribute dieses Knotens, um den Wert dieses Knotens abzurufen:

/*
 * 关于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;
// }

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels Ich hoffe, dass es für die Lernhilfe aller nützlich sein kann.

Verwandte Empfehlungen:

PHP-Beispielcode für den regulären Abgleich von Datum und Uhrzeit (Zeitstempelkonvertierung)

implementiert durch PHP Benutzerdefiniertes Bild Beispiel für eine Funktion zum Zuschneiden in der Mitte [zum Testen verfügbar]

Verwenden Sie php, um den Beispielcode für die FLV-Videolänge zu erhalten

Das obige ist der detaillierte Inhalt vonPHP implementiert Methoden für native DOM-Objekte zur Manipulation von XML. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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