Maison  >  Article  >  développement back-end  >  PHP implémente des méthodes permettant aux objets DOM natifs de manipuler XML

PHP implémente des méthodes permettant aux objets DOM natifs de manipuler XML

墨辰丷
墨辰丷original
2018-05-31 16:13:501278parcourir

Tout le monde sait que pour exploiter les fichiers de type XML, PHP dispose d'un ensemble d'objets DOM intégrés pour le traitement. Les opérations XML, depuis la création, l'ajout, la modification et la suppression, peuvent être effectuées à l'aide des fonctions de l'objet DOM. L'article suivant présente comment fonctionner à l'aide d'un exemple de code. Les amis dans le besoin peuvent s'y référer.

1. Créer

Créez un nouveau fichier XML et écrivez quelques données dans ce fichier 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(&#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文件中

L'extrait de code ci-dessus peut créer un fichier XML et ajouter des informations à ce fichier, y compris des valeurs et des attributs. .xml dans le répertoire courant, vous pouvez jeter un œil à son contenu.

<?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. Lire les informations XML et ajouter de nouveaux attributs

Le t Le fichier .xml créé dans la section précédente est utilisé comme objet d'opération. Les informations contenues dans le fichier t.xml sont lues et un nouveau nombre d'attributs est ajouté au nœud avec une valeur de 1.

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

Regardez les valeurs extraites :

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

Regardez à nouveau le contenu du fichier t.xml actuel. L'attribut count a été ajouté.

<?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. Modifier les attributs et les valeurs des nœuds

Précédent section Le fichier t.xml dans est l'objet d'opération. Modifiez l'attribut obj pour qu'il soit la valeur de comptage du nœud CPU. La nouvelle valeur est 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;);

Le fichier t.xml après l'opération est le suivant Vous pouvez voir que l'attribut count du nœud obj=cpu a été modifié et. la valeur a été modifiée avec succès.

<?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. Supprimer les nœuds

Si vous souhaitez l'ajouter, il sera supprimé. En utilisant le fichier t.xml dans la section ci-dessus comme objet d'opération, supprimez le nœud 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;);

Regardez le contenu du fichier t.xml après l'opération. Le nœud avec obj=disk a été supprimé avec succès.

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

Ajouter un nouveau nœud enfant au nœud racine

Le t.xml de la section précédente est l'objet opération, et ajouter un nouveau nœud enfant au nœud racine Ajoutez un nouveau nœud enfant à EventList.

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

Regardez le contenu du fichier t.xml après l'opération. Le nouveau nœud enfant a été inséré dans le nœud racine.

<?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. À propos de l'article ($index)

item(index) C'est une méthode de la classe DOMNodeList. Sa fonction est de renvoyer un nœud spécifié par l'index. La méthode getElementsByTagName(name) de la classe DOMDocument renvoie une instance d'un objet DOMNodeList, donc la méthode item(index) peut être appelée directement. En prenant le t.xml dans la section ci-dessus comme exemple, si e=dom−>getElementsByTagName(‘EventList′) obtient les informations du nœud EventList, car le nœud EventList est le nœud racine, il n'y en a qu'un, donc quand il appelle item(index), l'index est seulement index=0, car il n'y en a que 1 et si e=dom−>getElementsByTagName(‘event′) récupère les informations du nœud événement, car il y a 4 événements, lorsqu'il appelle item(index), l'index $index={0,1,2,3} a 4 valeurs à choisir parmi. Chaque nœud contient plusieurs attributs, qui peuvent être exprimés sous la forme d'un tableau de paires clé-valeur, comme suit :

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

peut également être Utiliser comme attribut d'un objet, par exemple, pour obtenir la valeur de ce nœud :

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

Résumé : Ce qui précède est tout le contenu de ce article, j'espère qu'il pourra être utile à tout le monde, l'apprentissage aide.

Recommandations associées :

Exemple de code PHP de correspondance régulière de date et d'heure (conversion d'horodatage)

implémenté par PHP Image personnalisée Exemple de fonction de recadrage central [disponible pour les tests]

Utilisez php pour obtenir l'exemple de code de longueur de vidéo flv

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn