PHP简单读取XML
阅读原文时间:2023年07月10日阅读:1

DOM

document object model,文档对象模型,就是树形结构

节点的分类

  1. 元素节点
  2. 属性节点
  3. 值节点
  4. 注释节点
  5. 根节点(document才是根节点)

生成XML文档 xml的根节点为document节点

如果book下只有一个节点元素可以用此操作取得结点元素的值

/***********************************************************/

'PHP','type'=>'脚本语言'),array('name'=>'XML','type'=>'标记语言'),array('name'=>'C#','type'=>'动态语言')); $doc=new DOMDocument('1.0','utf-8'); //设置版本号和字符编码 $doc->formatOutput=true; //格式化输出 一般不用 这样降低效率 $books=$doc->createElement('books'); //创建一个元素节点 foreach($array as $value) { $book=$doc->createElement('book');//创建book节点  $name=$doc->createElement('name', $value\['name'\]); //创建name节点,并赋值 $book->appendChild($book); //在元素的最后面添加子元素 $book->appendChild($name); $book->setAttribute('type',$value\['type'\]); } $doc->appendChild($books); $doc->save('books.xml'); echo '写入成功'; /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ if($\_POST){//对已有的xml文档进行添加操作 $doc=new DOMDocument();//不需要字符集和版本,因为已经存在 $doc->preserveWhiteSpace=false;//去掉空格元素的影响 $doc->formatOutput=true;//格式化输出 $path='./books.xml';//将文件路径变为变量,以后好修改 $doc->load($path);//对xml文档加载 $book=$doc->createElement('book');//创建book节点 $name=$doc->createElement('name',$\_POST\['name'\]);//创建name节点 $price=$doc->createElement('price',$\_POST\['price'\]);//创建price节点 $book->appendChild($name);//改变xml中包含的顺序 $book->appendChild($price); $book->setAttribute('type', $\_POST\['type'\]);//设置book节点的属性 $books=$doc->documentElement;//创建books节点 $books->appendChild($book);// if($doc->save($path))//保存xml文档到硬盘 { header('location:books\_admin.php'); } else { echo '添加失败'; } } /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ //删除节点 preserveWhiteSpace=false; $doc->formatOutput=true; $doc->load('books.xml'); $index=$\_GET\['index'\]; $book=$doc->getElementsByTagName('book')->item($index); $book->parentNode->removeChild($book); $doc->save('books.xml'); header('location:books\_admin.php'); /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ 修改 preserveWhiteSpace=false; $path='./books.xml'; $doc->load($path); $oldbook=$doc->getElementsByTagName('book')->item($index); if($\_POST){ $newbook=$doc->createElement('book'); $name=$doc->createElement('name',$\_POST\['name'\]); $price=$doc->createElement('price',$\_POST\['price'\]); $newbook->setAttribute('type', $\_POST\['type'\]); $newbook->appendChild($name); $newbook->appendChild($price); $root=$doc->documentElement->replaceChild($newbook, $oldbook); //替换节点 $doc->save($path); header('location:books\_admin.php'); } ?>

/***********************************************************/

递归遍历xml

值节点的名称是“#text”,根节点的名称是“#document”

<?php

//递归XML文档  适合xml通用操作,但是消耗资源

function getChilds($node){

echo "

    ";

    if($node->nodeType==3){

    echo "

  • ".$node->nodeValue."
  • ";   //取出节点的值

    }

    else

    {

    echo "

  • ".$node->nodeName."
  • ";    //取出元素节点的名称

    if($node->attributes->length>0) //节点的属性的个数大于0,表示此节点有属性

    {

    foreach ($node->attributes as $attr){

    echo "

  • ".$attr->value."
  • ";   //取出节点的值

    }

    }

    foreach($node->childNodes as $child){   //便利循环子元素

    getChilds($child);   //递归点

    }

    }

    echo "

";

}

$doc=new DOMDocument();

$doc->preserveWhiteSpace=false;  //不保护空格,就是导入XML的时候去掉空白字符

$doc->load('books.xml');

$root=$doc->documentElement;    //获得最顶层元素

getChilds($root);

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章