PHP XML

1. XML Expat 解析器(基于事件)

工作原理

使用的xml文件test.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>
  1. 通过 xml_parser_create() 函数初始化 XML 解析器
$parser = xml_parser_create();
  1. 创建配合不同事件处理程序的的函数
    元素开始时使用的函数
function start ($patser, $element_name, $element_attrs) {
       switch ($element_name) {
           case "NONE":
               echo "-- Note --<br />";
               break;
           case "TO":
               echo "To: ";
               break;
           case "FROM":
               echo "From: ";
               break;
           case "HEADING":
               echo "Heading: ";
               break;
           case "BODY":
               echo "message: ";
       }
   }

元素末端使用的函数

function stop ($parser, $element_name) {
        echo "<br />";
    }

查找字符数据时使用的功能

function char ($parser, $data) {
        echo $data;
    }

指定元素的处理

xml_set_element_handler($parser, 'start', 'stop');
  1. 添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
    指定数据处理程序
xml_set_element_handler($parser, 'start', 'stop');
  1. 添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字
    指定数据处理程序
xml_set_character_data_handler($parser, "char");
  1. 符数据时执行哪个函数5 通过 xml_parse() 函数来解析文件 "test.xml"
    打开xml文件
$fp = fopen("test.xml", "r");
  1. 万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
    读取数据
while ($data = fread($fp,4096)) {
        xml_parse($parser, $data, feof($fp))
        or die(sprintf("XML Error: %s at lone %d",
            xml_error_string(xml_get_error_code($parser)),
            xml_get_current_line_number($parser)));
    }
  1. 调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存
xml_parser_free($parser);

输出效果

To: Tove
From: Belle
Heading: Reminder
message: Don't forget me this weekend!

2. XML DOM(基于树)

初始化xml解析器

$xmlDoc = new DOMDocument();

加载xml

$xmlDoc->load("test.xml");

遍历xml中所有元素

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item) {
      print $item->nodeName . " = " . $item->nodeValue . "<br>";
}

输出效果

/#text =
/to = Tove
/#text =
from = Belle
/#text =
heading = Reminder
/#text =
body = Don't forget me this weekend!
/#text =
/为转义

3. SimpleXML

输出test.xml

$xml = simpexml_load_file("test.xml");
print_r($xml);

输出结果

SimpleXMLElement Object ( [to] => Tove [from] => Belle [heading] => Reminder [body] => Don't forget me this weekend! )

输出每个元素的数据

$xml = simplexml_load_file("test.xml");
    echo $xml->to . "<br />";
    echo $xml->from . "<br />";
    echo $xml->heading . "<br />";
    echo $xml->body . "<br />";

输出结果

Tove
Belle
Reminder
Don't forget me this weekend!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • /* * This file is part of the overtrue/wechat. * * (c) ov...
    聚齐阅读 1,690评论 0 0
  • PHP常用函数大全 usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解...
    上街买菜丶迷倒老太阅读 5,198评论 0 20
  • php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uni...
    思梦PHP阅读 6,130评论 1 24
  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 5,985评论 1 7
  • XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml...
    海边拾贝阅读 4,095评论 0 3