php中DOMElement操作xml文档实例演示

复制代码 代码如下:

  <?php

  //Store your html into $html variable.

  $html="<html>

  <head>

  <title>Rakesh Verma</title>

  </head>

  <body>

  <a href='http://example.com'>Example</a>

  <a href='http://google.com'>Google</a>

  <a href='http://www.yahoo.com'>Yahoo</a>

  </body>

  </html>";

  $dom = new DOMDocument();

  $dom->loadHTML($html);

  //Evaluate Anchor tag in HTML

  $xpath = new DOMXPath($dom);

  $hrefs = $xpath->evaluate("/html/body//a");

  for ($i = 0; $i < $hrefs->length; $i++) {

  $href = $hrefs->item($i);

  $url = $href->getAttribute('href');

  //remove and set target attribute

  $href->removeAttribute('target');

  $href->setAttribute("target", "_blank");

  $newURL=$url.".au";

  //remove and set href attribute

  $href->removeAttribute('href');

  $href->setAttribute("href", $newURL);

  }

  // save html

  $html=$dom->saveHTML();

  echo $html;

  ?>

  例2

  

复制代码 代码如下:

  /*<?xml version="1.0" encoding="UTF-8" standalone="no"?>

  <!-- css的样式定义,不加点。如:name{color:red;} -->

  <?xml-stylesheet type="text/css" href="css.css"?>

  <!-- 引入dtd文档定义文件 (根元素:班级)<!DOCTYPE 班级 SYSTEM "class.dtd" /> -->

  <!-- <!DOCTYPE 班级[

  <!ELEMENT 班级 (学生+)>

  <!ELEMENT 学生 (名字,年龄,介绍)>

  <!ELEMENT 名字 (#PCDATA)>

  <!ELEMENT 年龄 (#PCDATA)>

  <!ELEMENT 介绍 (#PCDATA)>

  ] /> -->

  <班级>

  <学生 number="101">

  <名字>孙悟空</名字>

  <名字>孙行者</名字>

  <年龄>123</年龄>

  <介绍><![CDATA[&*$%特殊字串^&#$&]]></介绍>

  </学生>

  <学生 number="10"2">

  <名字>白骨精</名字>

  <年龄>140</年龄>

  <介绍>介绍内容</介绍>

  </学生>

  </班级>

  */

  $xmldoc = new DOMDocument('1.0', 'UTF-8');

  $xmldoc->load('datas.xml');

  $itemsNodeList = $xmldoc->getElementsbyTagName('学生');

  $itemElement = $itemsNodeList->item(0);//得到第一个完整的学生信息节点

  $itemChildsNodeList = $itemElement->getElementsbyTagName('名字');//得到子节点“名字”,也许有多个名字

  $itemChildNode = $itemChildsNodeList->item(0);//得到第一个名字节点

  echo $itemChildNode->nodeValue;//输出节点值

  //封装成函数

  $nodeArr = array('名字', '年龄', '介绍');

  function getNodeVal($xmldoc, $itemsName, $nodeArr){

  $items = $xmldoc->getElementsByTagName($itemsName);

  for($i=0; $i < $items->length; $i++){

  $item = $items->item($i);

  foreach($nodeArr as $node){

  $data[$i][] = $item->getElementsByTagName($node)->item(0)->nodeValue;

  }

  }

  return $data;

  }

  $data = getNodeVal($xmldoc, '学生', $nodeArr);

  print_r($data);