XML 文件

将在我们的例子中使用下面的 XML 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

初始化 XML 解析器

我们要在 PHP 中初始化 XML 解析器,为不同的 XML 事件定义处理器,然后解析这个 XML 文件。

例子

<?php//Initialize the XML parser
$parser=xml_parser_create();//Function to use at the start of an element
function start($parser,$element_name,$element_attrs){switch($element_name){case "NOTE":echo "-- Note --<br />";break; case "TO":echo "To: ";break; case "FROM":echo "From: ";break; case "HEADING":echo "Heading: ";break; case "BODY":echo "Message: ";}}//Function to use at the end of an element
function stop($parser,$element_name){echo "<br />";}//Function to use when finding character data
function char($parser,$data){echo $data;}//Specify element handler
xml_set_element_handler($parser,"start","stop");//Specify data handler
xml_set_character_data_handler($parser,"char");//Open XML file
$fp=fopen("test.xml","r");//Read data
while ($data=fread($fp,4096)){xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)),xml_get_current_line_number($parser)));}//Free the XML parser
xml_parser_free($parser);?>

以上代码的输出:

-- Note --
To: George
From: John
Heading: Reminder
Message: Don't forget the meeting!

工作原理解释:

  • 通过 xml_parser_create() 函数初始化 XML 解析器
  • 创建配合不同事件处理程序的的函数
  • 添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
  • 添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数
  • 通过 xml_parse() 函数来解析文件 "test.xml"
  • 万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
  • 调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存

加载和输出 XML

我们需要初始化 XML 解析器,加载 XML,并把它输出:

例子

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");print $xmlDoc->saveXML();
?>

以上代码的输出:

George John Reminder Don't forget the meeting!

假如您在浏览器窗口中查看源代码,会看到下面这些 HTML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

上面的例子创建了一个 DOMDocument-Object,并把 "note.xml" 中的 XML 载入这个文档对象中。

saveXML() 函数把内部 XML 文档放入一个字符串,这样我们就可以输出它。

循环 XML

我们要初始化 XML 解析器,加载 XML,并循环 <note> 元素的所有元素:

例子

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item){print $item->nodeName . " = " . $item->nodeValue . "<br />";}
?>

以上代码的输出:

#text =
to = George
#text =
from = John
#text =
heading = Reminder
#text =
body = Don't forget the meeting!
#text = 

在上面的例子中,您看到了每个元素之间存在空的文本节点。

当 XML 生成时,它通常会在节点之间包含空白。XML DOM 解析器把它们当作普通的元素,如果您不注意它们,有时会产生问题。

使用 SimpleXML

下面是 XML 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

我们打算从上面的 XML 文件输出元素的名称和数据。

这是需要做的事情:

  1. 加载 XML 文件
  2. 取得第一个元素的名称
  3. 使用 children() 函数创建在每个子节点上触发的循环
  4. 输出每个子节点的元素名称和数据

例子

<?php
$xml = simplexml_load_file("test.xml");echo $xml->getName() . "<br />";foreach($xml->children() as $child){echo $child->getName() . ": " . $child . "<br />";}
?>

以上代码的输出:

note
to: George
from: John
heading: Reminder
body: Don't forget the meeting!

转载于:https://www.cnblogs.com/ouyangping/p/6343468.html

php expat+DOM+SimpleXML XML读取相关推荐

  1. java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用org.w3c.dom(java dom)解析XML文档,创建.增删查改,保存,读取,遍历元素等操作 在保存文件时需要载入crimso ...

  2. xml 和android脚本之家,Android利用Document实现xml读取和写入操作

    本文实例为大家分享了利用Document实现xml读取和写入操作,供大家参考,具体内容如下 首先先来介绍一下什么xml?xml是可扩展标记语言,他可以用来标记数据,定义数据类型.是一种允许用户对自己标 ...

  3. java解析xml实例_在java中使用dom解析xml的示例分析

    本篇文章介绍了,在java中使用dom解析xml的示例分析.需要的朋友参考下 dom是个功能强大的解析工具,适用于小文档 为什么这么说呢?因为它会把整篇xml文档装载进内存中,形成一颗文档对象树 总之 ...

  4. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  5. DOM(二)——XML DOM

    XML(Extensible Markup Language)可扩展标记语言(可以通过这篇博客简单了解XML基础介绍),DOM(Document ObjectModel)文档对象模型(通过上篇博客了解 ...

  6. java w3c xml_org.w3c.dom(java dom)解析XML文档

    首先来了解点Java DOM 的 API: 1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBui ...

  7. java dom读写xml文件_java通过dom读写xml文件

    java通过dom读写xml文件 要读的xml文件 encoding="GB2312"?> "男"> 李华姓名> 14年龄> 学生> ...

  8. php dom xml解析,PHP使用DOM解析XML

    xml是一种严格的文档格式,有其自身的标准,解析xml,也有其标准,叫DOM标准.所有的xml.html都遵循DOM标准. 无论php,java,c,js,解析DOM树都遵循同样的DOM标准. 使用p ...

  9. 用JavaScript语言通过DOM遍历XML文档

    实验结果要求如下: 解决步骤: 1.  首先是布局,左边用表格比较方便,右边是个div块. 2.  嵌入JavaScript脚本,由易到难,写定义全部显示的功能函数.显示姓名功能函数,显示属性功能函数 ...

最新文章

  1. 花了我一个晚上浓缩了一整套阿里资深技术专家设计教程整理出的java架构设计方法
  2. 技术人员突围就业寒冬的最优途径 | 拿不到AI核心岗位Offer全额退款
  3. MFC中的资源视图和如何打开资源视图
  4. 大数据系列修炼-Scala课程07
  5. win服务器是如何发展到现在的?
  6. 修改VMOS2的SID 并成为成员服务器,求助SAS9.4服务器版的sid!!!急急!
  7. 合理支配“财富”:经理人运用时间的12种典型模式
  8. chrome导出插件
  9. Fiddler抓包详解
  10. linux阻止程序,Linux:阻止某些应用程序/主机名的IPv6
  11. 【Flutter】微信项目实战【06】 通讯录界面搭建(中)
  12. 我的springboot+vue前后端分离权限脚手架
  13. angular4与高德地图的结合
  14. 更新一些CAD中比较容易混淆的概念
  15. Greenplum小把戏 - 简单函数实现URL解码(URL Decode)- 同样适用于Deepgreen和PostgreSQL...
  16. SaaS系统权限体系设计
  17. 大专考试计算机英语题目,专科英语入学考试题
  18. 机器人中的xyz坐标系和右手定则
  19. python speed为0但是速度过快_python代码加速
  20. 幻方问题__技巧解法

热门文章

  1. 解析 WEB 中所有 URL 的简单牛B代码,先保存起来,方式将来找不到了
  2. 在可编辑div中插入文字或图片的问题解决思路
  3. PL/SQL Virtual Machine Memory Usage
  4. [转] spdk 块设备
  5. [2015-11-10]iis远程发布配置
  6. 【启发式搜索】[ZOJ1217]Eight
  7. 批量修改在索引中增加字段
  8. jQuery Mobile和PhoneGap混合开发
  9. 【笔试面试考试】C++基础知识点[转]
  10. 何时使用自定义HTTP 方法