简单代码:

<?php
$str = file_get_contents('test.xml');
//如果不是utf8的编码
//$xml = simplexml_load_string(iconv('gb2312', 'utf-8', $str));
//是utf-8的
$xml = simplexml_load_string($str);
foreach($xml->book as $sfile)
{  echo $sfile->author . "<br/>";  echo $sfile->title . "<br/>";  echo $sfile->publisher . "<br/>";
}

XML:

<?xml version="1.0" encoding="utf8"?><books><book><author>Jack Herrington</author><title>PHP Hacks</title><publisher>O'Reilly</publisher></book><book><author>Jack Herrington</author><title>Podcasting Hacks</title><publisher>O'Reilly</publisher></book></books>

读取:

// 用 DOM 读取 XML$doc = new DOMDocument();$doc->load('test.xml');$books = $doc->getElementsByTagName("book");foreach( $books as $book ){$authors = $book->getElementsByTagName("author");$author = $authors->item(0)->nodeValue;  // nodeValue属性可根据节点的类型来设置或返回某个节点的值。$publishers = $book->getElementsByTagName("publisher");$publisher = $publishers->item(0)->nodeValue;$titles = $book->getElementsByTagName( "title" );$title = $titles->item(0)->nodeValue;echo "Title: $title <br> Author: $author <br> Publisher: $publisher<br><hr><br>";}/*脚本首先创建一个 new DOMdocument 对象,用 load 方法把图书 XML 装入这个对象。之后,脚本用 getElementsByName 方法得到指定名称下的所有元素的列表。在 book 节点的循环中,脚本用 getElementsByName 方法获得 author、publisher 和 title 标记的 nodeValue。nodeValue 是节点中的文本。脚本然后显示这些值。*/
// 用 SAX 解析器读取 XML $g_books = array();$g_elem = null;function startElement( $parser, $name, $attrs ){global $g_books, $g_elem;if ( $name == 'BOOK' ) $g_books []= array();$g_elem = $name;}function endElement( $parser, $name ){global $g_elem;$g_elem = null;}function textData( $parser, $text ){global $g_books, $g_elem;if ( $g_elem == 'AUTHOR' || $g_elem == 'PUBLISHER' || $g_elem == 'TITLE' ){$g_books[ count( $g_books ) - 1 ][ $g_elem ] = $text;}}$parser = xml_parser_create();xml_set_element_handler( $parser, "startElement", "endElement" );xml_set_character_data_handler( $parser, "textData" );$f = fopen( 'test.xml', 'r' );while( $data = fread( $f, 4096 ) ){xml_parse( $parser, $data );}xml_parser_free( $parser );foreach( $g_books as $book ){echo $book['TITLE']." - ".$book['AUTHOR']." - ";echo $book['PUBLISHER']."\n";}/*脚本首先设置 g_books 数组,它在内存中容纳所有图书和图书信息,g_elem 变量保存脚本目前正在处理的标记的名称。然后脚本定义回调函数。在这个示例中,回调函数是 startElement、endElement  和 textData。在打开和关闭标记的时候,分别调用 startElement 和 endElement  函数。在开始和结束标记之间的文本上面,调用 textData。在这个示例中,startElement 标记查找 book 标记,在 book  数组中开始一个新元素。然后,textData 函数查看当前元素,看它是不是 publisher、title  或 author 标记。如果是,函数就把当前文本放入当前图书。为了让解析继续,脚本用 xml_parser_create 函数创建解析器。然后,设置回调句柄。之后,脚本读取文件并把文件的大块内容发送到解析器。在文件读取之后,xml_parser_free 函数删除解析器。脚本的末尾输出 g_books 数组的内容。*/
// 用正则表达式解析 XML$xml = "";$f = fopen( 'test.xml', 'r' );while( $data = fread( $f, 4096 ) ) { $xml .= $data; }fclose( $f );preg_match_all( "/\<book\>(.*?)\<\/book\>/s", $xml, $bookblocks );foreach( $bookblocks[1] as $block ){preg_match_all( "/\<author\>(.*?)\<\/author\>/", $block, $author );preg_match_all( "/\<title\>(.*?)\<\/title\>/", $block, $title );preg_match_all( "/\<publisher\>(.*?)\<\/publisher\>/", $block, $publisher );echo( $title[1][0]." - ".$author[1][0]." - ". $publisher[1][0]."\n" );}/*我从不建议使用正则表达式读取 XML,但是有时它是兼容性最好的方式,因为正则表达式函数总是可用的。不要用正则表达式读取直接来自用户的 XML,因为无法控制这类 XML 的格式或结构。应当一直用 DOM 库或 SAX 解析器读取来自用户的 XML。*/

编写:

// 用 DOM 编写 XML$books = array();$books [] = array('title' => 'PHP Hacks','author' => 'Jack Herrington','publisher' => "O'Reilly");$books [] = array('title' => 'Podcasting Hacks','author' => 'Jack Herrington','publisher' => "O'Reilly");$doc = new DOMDocument();$doc->formatOutput = true;$r = $doc->createElement( "books" );$doc->appendChild( $r );foreach( $books as $book ){$b = $doc->createElement( "book" );$author = $doc->createElement( "author" );$author->appendChild(  $doc->createTextNode( $book['author'] ) );$b->appendChild( $author );$title = $doc->createElement( "title" );$title->appendChild( $doc->createTextNode( $book['title'] ) );$b->appendChild( $title );$publisher = $doc->createElement( "publisher" );$publisher->appendChild( $doc->createTextNode( $book['publisher'] ) );$b->appendChild( $publisher );$r->appendChild( $b );}//echo $doc->saveXML();/*在脚本的顶部,用一些示例图书装入了 books 数组。这个数据可以来自用户也可以来自数据库。示例图书装入之后,脚本创建一个 new DOMDocument,并把根节点 books 添加到它。然后脚本为每本书的 author、title 和 publisher 创建节点,并为每个节点添加文本节点。每个 book 节点的最后一步是重新把它添加到根节点 books。使用 DOM 的真正价值在于它创建的 XML 总是格式正确的。但是如果不能用 DOM 创建 XML 时该怎么办?*/
  <?php// PHP 编写xml$books = array();$books [] = array('title' => 'PHP Hacks','author' => 'Jack Herrington','publisher' => "O'Reilly");$books [] = array('title' => 'Podcasting Hacks','author' => 'Jack Herrington','publisher' => "O'Reilly");?><books><?php  foreach( $books as $book ){?><book><title><?php echo( $book['title'] ); ?></title><author><?php echo( $book['author'] ); ?></author><publisher><?php echo( $book['publisher'] ); ?></publisher></book><?php}?></books>

实例中用到的 test.xml 如下:

<?xml version="1.0" encoding="utf8"?><books><book><author>Jack Herrington</author><title>PHP Hacks</title><publisher>O'Reilly</publisher></book><book><author>Jack Herrington</author><title>Podcasting Hacks</title><publisher>O'Reilly</publisher></book></books>

用 PHP 读取和编写 XML DOM相关推荐

  1. 用php编写xml,PHP 读取和编写 XML

    什么是 XML? XML 是一种数据存储格式.它没有定义保存什么数据,也没有定义数据的格式.XML 只是定义了标记和这些标记的属性.格式良好的 XML 标记看起来像这样: 代码如下: Jack Her ...

  2. java编写大数据分析模型_如何用Java(DOM分析器)编写XML文件

    java编写大数据分析模型 Earlier we learned how to read XML file and how to edit XML file in java using DOM Par ...

  3. 使用DOM读取和维护XML数据

    笔记目录: 1.了解XML解析 2.使用DOM读取和维护XML数据 3.使用DOM4J读取和维护XML数据 1.DOM解析XML的步骤 2.使用DOM解析XML时主要使用的对象 XML中节点有三种:1 ...

  4. java dom创建xml文件_Java 如何使用dom方式读取和创建xml文件

    Java 如何使用dom方式读取和创建xml文件 发布时间:2020-11-11 17:08:31 来源:亿速云 阅读:101 作者:Leah 本篇文章给大家分享的是有关Java 如何使用dom方式读 ...

  5. Java解析XML(DOM解析和SAX解析)

    前言:在程序中访问和操作XML文件一般有两种模型:DOM(文档对象模型)和流模型:在本篇文章中分别对应DOM解析和SAX解析. 目录 1 .DOM解析与SAX解析的相关知识点 1.1 DOM 1.2 ...

  6. XML DOM 解析器概述

    大多数浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 JavaScript 可存取的对象(XML DOM). XML 解析器 XML DOM 包含了遍历 XML 树, ...

  7. string to xml java_Java String to XML - Parse String to XML DOM Example - 入门小站-rumenz.com

    在Java中,XML用org.w3c.dom.Document对象表示. 在本XML教程中,我们将学习-将XML string to XML转换string to XML文档 将XML文件内容转换为X ...

  8. python 解析XML xml.dom

    2019独角兽企业重金招聘Python工程师标准>>> 一 .xml.dom 解析XML的API描述 minidom.parse(filename) 加载读取XML文件 doc.do ...

  9. python 之模块之 xml.dom.minidom解析xml

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...

最新文章

  1. pandas使用date_range函数生成日期序列数据、pandas将两个日期序列数据作差生成新的日期差数据列(8 days)、并提取天数数值(8)
  2. 231. Power of Two
  3. struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
  4. JVM -verbose参数详解(转)
  5. 再高深的 Python 面试难题,这门课都给你整得明明白白!
  6. linux二重进程,二叉树递归实现与二重指针
  7. windows git 更改为unix模式换行符决解方法
  8. 和aes相比较有哪些特点_“黑枸杞”和“红枸杞”相比较,功效方面究竟存在哪些差别?...
  9. ArchLinux安装Gnome桌面
  10. Codeforces Round #232 (Div. 1) 解题报告
  11. 组合导航(九):三维简化的INS/GPS组合导航系统
  12. Mortal Kombat Tower - 每天一把CF - 20200919
  13. BugKu CTF(杂项篇MISC)—啊哒
  14. 微淼联合创始人孙延芳:以合规为第一要义,做财商教育“正规军”
  15. OJ每日一练——温度换算
  16. cglib demo以及Enhancer源码解析
  17. 手机助手通过usb数据线连接
  18. 坑挺多 | 联邦学习FATE:训练模型(二)
  19. 个人如何获取微信小程序的APPID
  20. Mysql导致CPU飙高的问题

热门文章

  1. oracle的in集合,oracle中in与not in集合中有空值问题
  2. 字符串数组的排序c++_Java——数组相关知识点及练习演绎
  3. c语言建立两个磁盘文件,建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作...
  4. 四个变量的图表怎么做_PPT中的图表怎么做才高大上?4步帮你搞定!
  5. linux 字符设备号分配状况
  6. CUDA 网格级并发-流(1)
  7. STM32那点事(1)_STM32F40_41xx启动文件详解
  8. image.resize()==>返回此图像的大小调整后的副本
  9. 3-3.HDFS项目实战目标和要求
  10. 上海c语言做游戏培训,0基础C语言游戏逆向课程,培训视频+项目实战