微信扫一扫打赏支持

php解析xml

php解析xml

一、总结

1、php很容易就可以解析xml

2、php功能:php不仅可以解析xml,那些zip,misc,视频音频都可以解析

3、编程语言功能不仅php能解析这些东西,c++,java也一样能 

 

注意点:

1、xml解析器有两种(基于和基于事件):基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了对树中元素的访问,例如文档对象模型 (DOM)。基于事件的解析器:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。

2、php解析xml两种方式(内部函数,外部插件):php解析xml可以用外部插件例如Expat(基于事件),也可以用内部函数(无需安装,内部核心函数)例如 PHP XML Parser 函数

3、解析php步骤:读取文件(例如$fp=fopen("test.xml","r");),解析文件(一些特定函数)及输出文件,很简单

 

二、PHP XML Expat 解析器

PHP XML Expat 解析器


内建的 Expat 解析器使在 PHP 中处理 XML 文档成为可能。


XML 是什么?

XML 用于描述数据,其焦点是数据是什么。XML 文件描述了数据的结构。

在 XML 中,没有预定义的标签。您必须定义自己的标签。

如需学习更多关于 XML 的知识,请访问我们的 XML 教程


Expat 是什么?

如需读取和更新 - 创建和处理 - 一个 XML 文档,您需要 XML 解析器

有两种基本的 XML 解析器类型:

  • 基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了对树中元素的访问,例如文档对象模型 (DOM)。
  • 基于事件的解析器:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。

Expat 解析器是基于事件的解析器

基于事件的解析器集中在 XML 文档的内容,而不是它们的结构。正因为如此,基于事件的解析器能够比基于树的解析器更快地访问数据。

请看下面的 XML 片段:

<from>Jani</from>

基于事件的解析器把上面的 XML 报告为一连串的三个事件:

  • 开始元素:from
  • 开始 CDATA 部分,值:Jani
  • 关闭元素:from

上面的 XML 实例包含了形式良好的 XML。不过这个实例是无效的 XML,因为没有与它关联的文档类型声明 (DTD)。

然而,在使用 Expat 解析器时,这没有区别。Expat 是不检查有效性的解析器,忽略任何 DTD。

作为一款基于事件、非验证的 XML 解析器,Expat 快速且轻巧,十分适合 PHP 的 Web 应用程序。

注释:XML 文档必须形式良好,否则 Expat 会生成错误。


安装

XML Expat 解析器函数是 PHP 核心的组成部分。无需安装就可以使用这些函数。


XML 文件

下面的 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>



初始化 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: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!

工作原理:

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

更多 PHP Expat 解析器的信息

如需了解更多关于 PHP Expat 函数的信息,请访问我们的 PHP XML Parser 参考手册

 

参考:

PHP XML Expat 解析器 | 菜鸟教程
http://www.runoob.com/php/php-xml-parser-expat.html

 

三、PHP XML Parser 函数

PHP XML Parser 函数


PHP XML Parser 简介

XML 函数允许您解析 XML 文档,但无法对其进行验证。

XML 是一种用于标准结构化文档交换的数据格式。您可以在我们的 XML 教程 中找到更多有关 XML 的信息。

该扩展使用 Expat XML 解析器。

Expat 是一种基于事件的解析器,它把 XML 文档视为一系列事件。当某个事件发生时,它调用一个指定的函数处理它。

Expat 是无验证的解析器,忽略任何链接到文档的 DTD。但是,如果文档的形式不好,则会以一个错误消息结束。

由于它是一种基于事件,且无验证的解析器,Expat 具有快速并适合 Web 应用程序的特性。

XML 解析器函数允许您创建 XML 解析器,并为 XML 事件定义句柄。


安装

XML Parser 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。


PHP XML Parser 函数

PHP:指示支持该函数的最早的 PHP 版本。

函数描述PHP
utf8_decode() 把 UTF-8 字符串解码为 ISO-8859-1。 3
utf8_encode() 把 ISO-8859-1 字符串编码为 UTF-8。 3
xml_error_string() 获取 XML 解析器的错误字符串。 3
xml_get_current_byte_index() 获取 XML 解析器的当前字节索引。 3
xml_get_current_column_number() 获取 XML 解析器的当前列号。 3
xml_get_current_line_number() 获取 XML 解析器的当前行号。 3
xml_get_error_code() 获取 XML 解析器的错误代码。 3
xml_parse() 解析 XML 文档。 3
xml_parse_into_struct() 把 XML 数据解析到数组中。 3
xml_parser_create_ns() 创建带有命名空间支持的 XML 解析器。 4
xml_parser_create() 创建 XML 解析器。 3
xml_parser_free() 释放 XML 解析器。 3
xml_parser_get_option() 从 XML 解析器获取选项。 3
xml_parser_set_option() 为 XML 解析器设置选项。 3
xml_set_character_data_handler() 建立字符数据处理器。 3
xml_set_default_handler() 建立默认处理器。 3
xml_set_element_handler() 建立起始和终止元素处理器。 3
xml_set_end_namespace_decl_handler() 建立终止命名空间声明处理器。 4
xml_set_external_entity_ref_handler() 建立外部实体处理器。 3
xml_set_notation_decl_handler() 建立符号声明处理器。 3
xml_set_object() 在对象中使用 XML 解析器。 4
xml_set_processing_instruction_handler() 建立处理指令(PI)处理器。 3
xml_set_start_namespace_decl_handler() 建立起始命名空间声明处理器。 4
xml_set_unparsed_entity_decl_handler() 建立未解析实体声明处理器。 3

 


PHP XML Parser 常量

 

常量
XML_ERROR_NONE (integer)
XML_ERROR_NO_MEMORY (integer)
XML_ERROR_SYNTAX (integer)
XML_ERROR_NO_ELEMENTS (integer)
XML_ERROR_INVALID_TOKEN (integer)
XML_ERROR_UNCLOSED_TOKEN (integer)
XML_ERROR_PARTIAL_CHAR (integer)
XML_ERROR_TAG_MISMATCH (integer)
XML_ERROR_DUPLICATE_ATTRIBUTE (integer)
XML_ERROR_JUNK_AFTER_DOC_ELEMENT (integer)
XML_ERROR_PARAM_ENTITY_REF (integer)
XML_ERROR_UNDEFINED_ENTITY (integer)
XML_ERROR_RECURSIVE_ENTITY_REF (integer)
XML_ERROR_ASYNC_ENTITY (integer)
XML_ERROR_BAD_CHAR_REF (integer)
XML_ERROR_BINARY_ENTITY_REF (integer)
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF (integer)
XML_ERROR_MISPLACED_XML_PI (integer)
XML_ERROR_UNKNOWN_ENCODING (integer)
XML_ERROR_INCORRECT_ENCODING (integer)
XML_ERROR_UNCLOSED_CDATA_SECTION (integer)
XML_ERROR_EXTERNAL_ENTITY_HANDLING (integer)
XML_OPTION_CASE_FOLDING (integer)
XML_OPTION_TARGET_ENCODING (integer)
XML_OPTION_SKIP_TAGSTART (integer)
XML_OPTION_SKIP_WHITE (integer)

 

四、后序

PHP Zip File 函数 | 菜鸟教程
http://www.runoob.com/php/php-ref-zip.html

PHP 可用的函数 | 菜鸟教程
http://www.runoob.com/php/php-variable-handling-functions.html

 

posted @ 2018-05-05 11:48  范仁义  阅读(743)  评论(0编辑  收藏  举报