Table of Contents
一、XML 元素结构例程
二、XML 标签映射例程
三、XML 外部实体例程
四、XML解析器函数
Home Backend Development XML/RSS Tutorial XML operation of PHP extension (3) - XML ​​parser usage and related functions

XML operation of PHP extension (3) - XML ​​parser usage and related functions

Feb 13, 2017 pm 03:02 PM
php extension xml operation



一、XML 元素结构例程

第一个例程缩进显示文档中的开始元素结构。


Example #1 显示 XML 元素结构


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<?php$file = "data.xml";$depth = array();

function startElement($parser, $name, $attrs){

global $depth;

for ($i = 0; $i < $depth[$parser]; $i++)

{

echo "  ";

}

echo "$name\n";

$depth[$parser]++;

}

function endElement($parser, $name){

global $depth;

$depth[$parser]--;

}

$xml_parser = xml_parser_create();

xml_set_element_handler($xml_parser, "startElement", "endElement");

if (!($fp = fopen($file, "r")))

{die("could not open XML input");

}

while ($data = fread($fp, 4096))

{

if (!xml_parse($xml_parser, $data, feof($fp))) {

die(sprintf("XML error: %s at line %d",xml_error_string(xml_get_error_code($xml_parser)),

xml_get_current_line_number($xml_parser)));

}

}xml_parser_free($xml_parser);

?>

Copy after login


二、XML 标签映射例程

Example #1 将 XML 映射为 HTML


此例程直接地将 XML 标签映射为 HTML 标签。 在“map_array”中未找到的元素将被忽略。 当然,此例程只针对特定的 XML 文档类型起作用。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<?php$file = "data.xml";

$map_array = array("BOLD"     => "B","EMPHASIS" => "I","LITERAL"  => "TT");

function startElement($parser, $name, $attrs){

global $map_array;

if (isset($map_array[$name])) {

echo "<$map_array[$name]>";

}

}

function endElement($parser, $name){global $map_array;

if (isset($map_array[$name])) {

echo "</$map_array[$name]>";}

}

function characterData($parser, $data){

echo $data;

}

$xml_parser = xml_parser_create();

// use case-folding so we are sure to find the tag in

$map_arrayxml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);

xml_set_element_handler($xml_parser, "startElement", "endElement");

xml_set_character_data_handler($xml_parser, "characterData");

if (!($fp = fopen($file, "r")))

{die("could not open XML input");

}

while ($data = fread($fp, 4096)) {

if (!xml_parse($xml_parser, $data, feof($fp))) {

die(sprintf("XML error: %s at line %d",

xml_error_string(xml_get_error_code($xml_parser)),

xml_get_current_line_number($xml_parser)));}

}

xml_parser_free($xml_parser);

?>

Copy after login


三、XML 外部实体例程

此例程用于加亮 XML 代码。举例说明如何使用外部实体引用来包含和解析其他文档, 及处理指令是如何被处理的,及判断处理指令所包含代码是否“可信任”的一种方法

用于此例程的 XML 文档位于此例程的下方( 和 )。


Example #1 外部实体例程


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

<?php$file = "xmltest.xml";

function trustedFile($file){

// 仅信任本地文件

if (!preg_match("@^([a-z]+)\:\/\/@i", $file)&& fileowner($file) == getmyuid()) {return true;}return false;}

function startElement($parser, $name, $attribs){

echo "&lt;<font color=\"#0000cc\">$name</font>";

if (count($attribs)) {

foreach ($attribs as $k => $v) {

echo " <font color=\"#009900\">$k</font>=\"<fontcolor=\"#990000\">$v</font>\"";}}

echo "&gt;";

}

function endElement($parser, $name){

echo "&lt;/<font color=\"#0000cc\">$name</font>&gt;";

}

function characterData($parser, $data){

echo "<b>$data</b>";

}

function PIHandler($parser, $target, $data){

switch (strtolower($target)) {case "php":global $parser_file;

// 如何要解析的文档是“可信任”的, 则说明可安全// 地执行其内部的 PHP 代码。否则,显示代码内容。

if (trustedFile($parser_file[$parser])) {

eval($data);

}

else {printf("Untrusted PHP code: <i>%s</i>",htmlspecialchars($data));

}

break;}}

function defaultHandler($parser, $data){

if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {

printf(&#39;<font color="#aa00aa">%s</font>&#39;,htmlspecialchars($data));

}

else {printf(&#39;<font size="-1">%s</font>&#39;,htmlspecialchars($data));}}

function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,$publicId) {

if ($systemId) {if (!list($parser, $fp) = new_xml_parser($systemId)) {printf("Could not open entity %s at %s\n", $openEntityNames,$systemId);

return false;}while ($data = fread($fp, 4096)) {if (!xml_parse($parser, $data, feof($fp))) {

printf("XML error: %s at line %d while parsing entity %s\n",xml_error_string(xml_get_error_code($parser)),xml_get_current_line_number($parser),

$openEntityNames);xml_parser_free($parser);return false;}}xml_parser_free($parser);return true;}return false;}

function new_xml_parser($file){global $parser_file;

$xml_parser = xml_parser_create();xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);

xml_set_element_handler($xml_parser, "startElement", "endElement");

xml_set_character_data_handler($xml_parser, "characterData");

xml_set_processing_instruction_handler($xml_parser, "PIHandler");

xml_set_default_handler($xml_parser, "defaultHandler");

xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");

if (!($fp = @fopen($file, "r"))) {return false;}

if (!is_array($parser_file)) {settype($parser_file, "array");}$parser_file[$xml_parser] = $file;

return array($xml_parser, $fp);}

if (!(list($xml_parser, $fp) = new_xml_parser($file))) {die("could not open XML input");}

echo "<pre class="brush:php;toolbar:false">";

while ($data = fread($fp, 4096)) {

if (!xml_parse($xml_parser, $data, feof($fp))) {

die(sprintf("XML error: %s at line %d\n",

xml_error_string(xml_get_error_code($xml_parser)),

xml_get_current_line_number($xml_parser)));}}

echo "

";echo "parse complete\n"; xml_parser_free($xml_parser); ?>
Copy after login

Example #2 xmltest.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<?xml version=&#39;1.0&#39;?>

<!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [

<!ENTITY plainEntity "FOO entity">

<!ENTITY systemEntity SYSTEM "xmltest2.xml">

]>

<chapter>

 <TITLE>Title &plainEntity;</TITLE>

 <para>

  <informaltable>

   <tgroup cols="3">

    <tbody>

     <row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>

     <row><entry>a2</entry><entry>c2</entry></row>

     <row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>

    </tbody>

   </tgroup>

  </informaltable>

 </para>

 &systemEntity;

 <section id="about">

  <title>About this Document</title>

  <para>

   <!-- this is a comment -->

   <?php echo &#39;Hi!  This is PHP version &#39; . phpversion(); ?>

  </para>

 </section>

</chapter>

Copy after login

此文件包含在 中:


Example #3 xmltest2.xml


1

2

3

4

5

6

7

8

9

<?xml version="1.0"?>

<!DOCTYPE foo [

<!ENTITY testEnt "test entity">

]>

<foo>

   <element attrib="value"/>

   &testEnt;

   <?php echo "This is some more PHP code being executed."; ?>

</foo>

Copy after login

四、XML解析器函数

  • utf8_decode — 将用 UTF-8 方式编码的 ISO-8859-1 字符串转换成单字节的 ISO-8859-1 字符串。

  • utf8_encode — 将 ISO-8859-1 编码的字符串转换为 UTF-8 编码

  • xml_error_string — 获取 XML 解析器的错误字符串

  • xml_get_current_byte_index — 获取 XML 解析器的当前字节索引

  • xml_get_current_column_number — 获取 XML 解析器的当前列号

  • xml_get_current_line_number — 获取 XML 解析器的当前行号

  • xml_get_error_code — 获取 XML 解析器错误代码

  • xml_parse_into_struct — 将 XML 数据解析到数组中

  • xml_parse — 开始解析一个 XML 文档

  • xml_parser_create_ns — 生成一个支持命名空间的 XML 解析器

  • xml_parser_create — 建立一个 XML 解析器

  • xml_parser_free — 释放指定的 XML 解析器

  • xml_parser_get_option — 从 XML 解析器获取选项设置信息

  • xml_parser_set_option — 为指定 XML 解析进行选项设置

  • xml_set_character_data_handler — 建立字符数据处理器

  • xml_set_default_handler — 建立默认处理器

  • xml_set_element_handler — 建立起始和终止元素处理器

  • xml_set_end_namespace_decl_handler — 建立终止命名空间声明处理器

  • xml_set_external_entity_ref_handler — 建立外部实体指向处理器

  • xml_set_notation_decl_handler — 建立注释声明处理器

  • xml_set_object — 在对象中使用 XML 解析器

  • xml_set_processing_instruction_handler — 建立处理指令(PI)处理器

  • xml_set_start_namespace_decl_handler — 建立起始命名空间声明处理器

  • xml_set_unparsed_entity_decl_handler — 建立未解析实体定义声明处理器

以上就是以上就是的内容,更多相关内容请关注PHP中文网(www.php.cn)!的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to check which extensions are used in php How to check which extensions are used in php Aug 01, 2023 pm 04:13 PM

You can check which extensions are used by PHP by viewing the phpinfo() function output, using command line tools, and checking the PHP configuration file. 1. View the phpinfo() function output, create a simple PHP script, save this script as phpinfo.php, and upload it to your web server. Access this file in the browser and use the browser's search function. Just look for the keyword "extension" or "extension_loaded" on the page to find information about the extension.

How to use php to extend PDO to connect to Oracle database How to use php to extend PDO to connect to Oracle database Jul 29, 2023 pm 07:21 PM

How to use PHP to extend PDO to connect to Oracle database Introduction: PHP is a very popular server-side programming language, and Oracle is a commonly used relational database management system. This article will introduce how to use PHP extension PDO (PHPDataObjects) to connect to Oracle database. 1. Install the PDO_OCI extension. To connect to the Oracle database, you first need to install the PDO_OCI extension. Here are the steps to install the PDO_OCI extension: Make sure

How to extend SuiteCRM's report generation capabilities using PHP How to extend SuiteCRM's report generation capabilities using PHP Jul 19, 2023 am 10:27 AM

How to use PHP to extend the report generation function of SuiteCRM SuiteCRM is a powerful open source CRM system that provides rich functions to help enterprises manage customer relationships. One of the important functions is report generation. Using reports can help enterprises better understand their business situations and make correct decisions. This article will introduce how to use PHP to extend the report generation function of SuiteCRM and provide relevant code examples. Before starting, you need to make sure that SuiteCRM is installed.

Getting Started with PHP: PHP Extension Installation Getting Started with PHP: PHP Extension Installation May 20, 2023 am 08:49 AM

When developing with PHP, we may need to use some PHP extensions. These extensions can provide us with more functions and tools, making our development work more efficient and convenient. But before using these extensions, we need to install them first. This article will introduce you to how to install PHP extensions. 1. What is a PHP extension? PHP extensions refer to components that provide additional functionality and services to the PHP programming language. These components can be installed and used through PHP's extension mechanism. PHP extension can help us with

How to use PHP's geoip extension? How to use PHP's geoip extension? Jun 01, 2023 am 09:13 AM

PHP is a popular server-side scripting language that can handle dynamic content on web pages. The geoip extension for PHP allows you to get information about the user's location in PHP. In this article, we’ll cover how to use PHP’s geoip extension. What is the GeoIP extension for PHP? The geoip extension for PHP is a free, open source extension that allows you to obtain data about IP addresses and location information. This extension can be used with the GeoIP database, a database developed by MaxMin

PHP extension and PHP version management of Pagoda Panel PHP extension and PHP version management of Pagoda Panel Jun 21, 2023 am 08:49 AM

Pagoda Panel is an open source server management panel. While providing website operators with convenient website management, database management, SSL certificate management and other services, it also provides powerful PHP extension and PHP version management functions, making server management easier. Be more simple and efficient. 1. PHP extension PHP extension is a module used to enhance PHP functions. By installing PHP extensions, more functions and services can be implemented, such as: accelerator: accelerator can significantly improve PHP performance, and reduce service load by caching PHP scripts.

In-depth exploration of PHP extension development: Uncovering the behind-the-scenes secrets of PHP extension development In-depth exploration of PHP extension development: Uncovering the behind-the-scenes secrets of PHP extension development Feb 19, 2024 pm 11:40 PM

PHP extension development is the art of creating custom functionality, extending PHP core functionality and building more powerful applications. It opens up new possibilities in the PHP world, allowing developers to transcend the basic limitations of the language. This article will take you on a journey of PHP extension development, providing you with comprehensive knowledge and practical guidance from basic concepts to advanced techniques. PHP extension development basics Before starting PHP extension development, you need to understand some basic concepts. What are PHP extensions? A PHP extension is a dynamic link library (DLL) that extends PHP core functionality and provides new data types, functions and classes. Advantages of PHP Extensions PHP extensions have many advantages, including: scalability, flexibility, performance optimization, and code reuse. PHP

The Complete Guide: How to read and process XML data using the php extension SimpleXML The Complete Guide: How to read and process XML data using the php extension SimpleXML Jul 28, 2023 pm 02:46 PM

Complete Guide: How to Read and Process XML Data Using PHP Extension SimpleXML Introduction: In modern web development, processing and manipulating XML data is a very common task. As a powerful server-side scripting language, PHP provides a variety of extensions and functions for processing and manipulating XML data. Among them, the SimpleXML extension is a particularly useful tool that simplifies the process of reading and processing XML data. This article will provide you with a complete guide on how to use PHP extensions

See all articles