Maison  >  Article  >  développement back-end  >  XML de manipulation d'objets DOM natifs PHP

XML de manipulation d'objets DOM natifs PHP

黄舟
黄舟original
2017-02-06 10:03:221336parcourir

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.

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. Le fichier final est t.xml dans le répertoire actuel. à cela.

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

Lire les informations XML et ajouter de nouveaux attributs


Le fichier t.xml créé dans la section précédente est l'objet d'opération, lu à haute voix t . xml et ajoutez un nouveau nombre d'attributs 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 la valeur extraite :

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>

Modifier les attributs du nœud et les valeurs du nœud

Le fichier t.xml de la section précédente est l'objet d'opération Modifiez la valeur de comptage du nœud dont l'attribut obj est cpu. la valeur est le compte 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 avec 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>

Supprimer le nœud

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 avec 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, ajoutez-le au nœud racine EventList Un nouveau nœud enfant.

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

À propos de item($index)

item(index) 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, afin que la méthode item(index) puisse ê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 et il n'y en a qu'un, donc quand il appelle item(index), L'index n'est disponible qu'avec index=0, car il n'en a que 1 et si e=dom−>getElementsByTagName('event') obtient les informations du nœud d'événement, car il y a 4 événements ; , lorsqu'il appelle item(index), l'index $ index={0,1,2,3}, vous avez le choix entre 4 valeurs. Chaque nœud contient plusieurs attributs, qui peuvent être exprimés sous la forme d'un tableau de paires clé-valeur, comme indiqué ci-dessous :

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 utilisé comme attribut d'un objet, comme obtenir le Valeur du 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;
// }

Ce qui précède est le contenu du XML d'opération d'objet DOM natif PHP Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


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