Home Backend Development PHP Tutorial PHP and XML: Using the expat function (2)

PHP and XML: Using the expat function (2)

Dec 17, 2016 am 09:42 AM

 php 和 xml: 使用expat函数(二)
  让我们看一下实际处理这个文档的PHP代码。 



/*NewsBoy : News system for the web written in PHP by Justin Grant (Web: jusgrant.cjb.net or justin.host.za.net Mail: justin@glendale.net)25 March V0.0.2 Converted Newsboy to a PHP class, allowing the layout to be easily modified. Also added made the HTML that is genrated a little easier to read.24 March V0.0.1 Just completed the intial version, very rough and basic.*/ 
class newsboy { var $xml_parser; var $xml_file; var $html; var $open_tag ; var $close_tag ; 
//Class Constructor 
function newsboy() { $this->xml_parser = ""; $this->xml_file = ""; $this->html = ""; $this->open_tag = array( 
//these are the default settings but they are quite easy to modify 
"NEWSBOY" => "nn", "STORY" => " ", "DATE" => "", "SLUG" => " ", "TEXT" => "", "PIC" => "", "NEWLINE" => "" ); $this->close_tag = array( "NEWSBOY" => " 
nnn", "STORY" => "", "DATE" => "", "SLUG" => " 
", "TEXT" => "n", "PIC" => " " 
" ); } 
//Class Destructor (has to be invoked manually as PHP does not support destructors) 

function destroy() { xml_parser_free($this->xml_parser); } 
//Class Members 
function concat($str) { $this->html .= $str; } 
function startElement($parser, $name, $attrs) { //global $open_tag; if ($format= $this->open_tag[$name]) { $this->html .= $format; } } 
function endElement($parser, $name) { global $close_tag; if ($format= $this->close_tag[$name]) { $this->html .= $format; } } 
function characterData($parser, $data) { $this->html .= $data; } 
/* function PIHandler($parser, $target, $data) { //switch (strtolower($target)){ // case "php": eval($data); // break; //} }*/ 
function parse() { $this->xml_parser = xml_parser_create(); xml_set_object($this->xml_parser, &$this); // use case-folding so we are sure to find the tag in $map_array 
xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, true); xml_set_element_handler($this->xml_parser, "startElement", "endElement"); xml_set_character_data_handler($this->xml_parser, "characterData");//xml_set_PRocessing_instruction_handler($this->xml_parser, "PIHandler"); 
if (!($fp = fopen($this->xml_file, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($this->xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml_parser)), xml_get_current_line_number($this->xml_parser))); } } }} 
?> 



-------------------------------------------------------------------------------- 

  在这个类的构造函数中,我创建了打开与关闭两个标记数组。数组的关键字与我后面将要分析的标记是 
一样的,并且它们相应的值包含格式化打开与关闭标记的HTML代码。 

  我定义了一个简单的类析构函数用来当我们不再需要它时释放XML 分析器。这个函数不得不手工调用, 
因为PHP不支持当一个对象释放时自动调用类的析构函数。 

  然后我定义了在XML文档中用来分析打开和关闭标记的主回调方法。我也定义了一个数据分析方法, 将 
用于当打开和关闭标记中有数据时,对数据进行简单的格式化,后面我将向你演示如何将这些回调方法注册 
到分析器中。 

  在startElement和closeElement(当分析到一个打开或关闭标专时被分别调用)中使用 标记的名字 
作为索引键值对相应的数组进行查询。如果那个键值存在,则返回值并且追加到类的'html' 属性的后面。 
'html'属性将在以后我们真正显示文档内容的时候使用。 

  characterData方法简单地将标记之间的值加到类的html属性的后面。 

  被注释起来的叫PIHandler的方法是一个回调函数,我还未曾实现它。如果它存在的话,它将直接在XML 
文档中处理php脚本。 

Now, let me explain the main parsing method call, guess what, parse()!!!

 The first line calls the function xml_parser_create(), which will return an expat xml parser instance and be Saved in the
attribute&this->xml_parser of the class.

  Next, we need to use the function xml_set_object() to register a callback function for the class method.

 This is how I use it, xml_set_object($this->xml_parser, &$this). In the first parameter, I specified the class attribute that holds the xml parser using
, and then in the second parameter, I specified the instance address of the PHP object. This lets the analyzer know that all callback functions that will be registered are actual methods of the specified class at that address. This is like a 'pass by reference' in c or c++, some people
simply call it a 'reference variable'.

 In the next line, I call xml_parser_set_option() to set an attribute of the xml parser, using case
folding. Case folding just tells the parser to know that when I parse my XML document I don't care about case sensitivity, but if you
want to use case sensitivity to define two different tags like or , you can leave it unset .

By using xml_set_element_handler(), I specify callback functions for the start and end tags, named
"startElement" and "endElement".

Next, I use xml_set_character_data_handler() to specify the character data processing handle as a callback function named
characterData(). The annotated function call, xml_set_processing_instruction_handler(), is the one I used to register the function PIHandler(). PIHandler can be included in XML documents to process PHP code.

The rest of the code simply reads the XML file and parses it. If an error occurs, the error details will be returned, including the line number where the error occurred.

The above is the content of PHP and XML: using the expat function (2). For more related articles, please pay attention to the PHP Chinese website (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

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

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)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

See all articles