我爱编程

PHP XML

2017-04-25  本文已影响0人  BelleChen

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!

上一篇下一篇

猜你喜欢

热点阅读