PHP扩展之XML操作(三)——XML解析器使用及相关函数
一、XML 元素结构例程
第一个例程缩进显示文档中的开始元素结构。
Example #1 显示 XML 元素结构
<?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); ?>
二、XML 标签映射例程
Example #1 将 XML 映射为 HTML
此例程直接地将 XML 标签映射为 HTML 标签。 在“map_array”中未找到的元素将被忽略。 当然,此例程只针对特定的 XML 文档类型起作用。
<?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); ?>
三、XML 外部实体例程
此例程用于加亮 XML 代码。举例说明如何使用外部实体引用来包含和解析其他文档, 及处理指令是如何被处理的,及判断处理指令所包含代码是否“可信任”的一种方法
用于此例程的 XML 文档位于此例程的下方( 和 )。
Example #1 外部实体例程
<?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 "<<font color=\"#0000cc\">$name</font>"; if (count($attribs)) { foreach ($attribs as $k => $v) { echo " <font color=\"#009900\">$k</font>=\"<fontcolor=\"#990000\">$v</font>\"";}} echo ">"; } function endElement($parser, $name){ echo "</<font color=\"#0000cc\">$name</font>>"; } 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('<font color="#aa00aa">%s</font>',htmlspecialchars($data)); } else {printf('<font size="-1">%s</font>',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); ?>
Example #2 xmltest.xml
<?xml version='1.0'?> <!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 'Hi! This is PHP version ' . phpversion(); ?> </para> </section> </chapter>
此文件包含在 中:
Example #3 xmltest2.xml
<?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>
四、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)!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Anda boleh menyemak sambungan yang digunakan oleh PHP dengan melihat output fungsi phpinfo(), menggunakan alat baris arahan dan menyemak fail konfigurasi PHP. 1. Lihat output fungsi phpinfo(), buat skrip PHP mudah, simpan skrip ini sebagai phpinfo.php, dan muat naik ke pelayan web anda Akses fail ini dalam pelayar dan gunakan fungsi carian pelayar "extension" atau "extension_loaded" pada halaman untuk mencari maklumat tentang sambungan.

Cara menggunakan PHP untuk melanjutkan PDO untuk menyambung ke pangkalan data Oracle Pengenalan: PHP ialah bahasa pengaturcaraan sebelah pelayan yang sangat popular, dan Oracle ialah sistem pengurusan pangkalan data hubungan yang biasa digunakan. Artikel ini akan memperkenalkan cara menggunakan sambungan PHP PDO (PHPDataObjects) untuk menyambung ke pangkalan data Oracle. 1. Pasang sambungan PDO_OCI Untuk menyambung ke pangkalan data Oracle, anda perlu memasang sambungan PDO_OCI terlebih dahulu. Berikut ialah langkah-langkah untuk memasang sambungan PDO_OCI: Pastikan

Cara menggunakan PHP untuk melanjutkan fungsi penjanaan laporan SuiteCRM SuiteCRM ialah sistem CRM sumber terbuka yang berkuasa yang menyediakan fungsi yang kaya untuk membantu perusahaan mengurus perhubungan pelanggan. Salah satu fungsi penting ialah penjanaan laporan Menggunakan laporan boleh membantu perusahaan lebih memahami situasi perniagaan mereka dan membuat keputusan yang betul. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melanjutkan fungsi penjanaan laporan SuiteCRM dan menyediakan contoh kod yang berkaitan. Sebelum memulakan, anda perlu memastikan SuiteCRM dipasang.

Apabila membangun dengan PHP, kami mungkin perlu menggunakan beberapa sambungan PHP. Sambungan ini boleh memberikan kami lebih banyak fungsi dan alatan, menjadikan pembangunan kami berfungsi dengan lebih cekap dan mudah. Tetapi sebelum menggunakan sambungan ini, kami perlu memasangnya terlebih dahulu. Artikel ini akan memperkenalkan anda kepada cara memasang sambungan PHP. 1. Apakah sambungan PHP? Sambungan PHP merujuk kepada komponen yang menyediakan fungsi dan perkhidmatan tambahan kepada bahasa pengaturcaraan PHP. Komponen ini boleh dipasang dan digunakan melalui mekanisme sambungan PHP. Sambungan PHP boleh membantu kami

PHP ialah bahasa skrip sebelah pelayan yang popular yang boleh mengendalikan kandungan dinamik pada halaman web. Sambungan geoip untuk PHP membolehkan anda mendapatkan maklumat tentang lokasi pengguna dalam PHP. Dalam artikel ini, kami akan membincangkan cara menggunakan sambungan geoip PHP. Apakah sambungan GeoIP untuk PHP? Sambungan geoip untuk PHP ialah sambungan sumber terbuka percuma yang membolehkan anda mendapatkan data tentang alamat IP dan maklumat lokasi. Sambungan ini boleh digunakan dengan pangkalan data GeoIP, pangkalan data yang dibangunkan oleh MaxMin

Pagoda Panel ialah panel pengurusan pelayan sumber terbuka Sambil menyediakan pengendali laman web dengan pengurusan laman web yang mudah, pengurusan pangkalan data, pengurusan sijil SSL dan perkhidmatan lain, ia juga menyediakan sambungan PHP yang berkuasa dan fungsi pengurusan versi PHP, menjadikan pengurusan pelayan lebih mudah dan cekap. 1. Sambungan PHP Sambungan PHP ialah modul yang digunakan untuk meningkatkan fungsi PHP Dengan memasang sambungan PHP, lebih banyak fungsi dan perkhidmatan boleh dilaksanakan, seperti: accelerator: pemecut boleh meningkatkan prestasi PHP dengan ketara, dan mengurangkan beban perkhidmatan dengan menyimpan skrip PHP.

Pembangunan sambungan PHP ialah seni mencipta fungsi tersuai, memanjangkan fungsi teras PHP dan membina aplikasi yang lebih berkuasa. Ia membuka kemungkinan baharu dalam dunia PHP, membolehkan pembangun mengatasi batasan asas bahasa. Artikel ini akan membawa anda dalam perjalanan pembangunan sambungan PHP, memberikan anda pengetahuan komprehensif dan panduan praktikal daripada konsep asas kepada teknik lanjutan. Asas pembangunan sambungan PHP Sebelum memulakan pembangunan sambungan PHP, anda perlu memahami beberapa konsep asas. Apakah sambungan PHP? Sambungan PHP ialah perpustakaan pautan dinamik (DLL) yang memanjangkan fungsi teras PHP dan menyediakan jenis data, fungsi dan kelas baharu. Kelebihan Sambungan PHP Sambungan PHP mempunyai banyak kelebihan, termasuk: kebolehskalaan, fleksibiliti, pengoptimuman prestasi dan penggunaan semula kod. PHP

Tutorial Lengkap: Cara Menggunakan PHP Extension GdImage untuk Penjanaan Imej Pengenalan: Penjanaan imej adalah keperluan biasa dalam pembangunan laman web. Contohnya, jana kod pengesahan, lakaran kenit, statistik grafik dan banyak lagi. PHP menyediakan banyak perpustakaan sambungan untuk memproses imej, salah satu yang paling biasa digunakan ialah GdImage. Tutorial ini memperincikan cara menggunakan sambungan GdImage untuk menjana imej dan menyediakan contoh kod yang berkaitan. Langkah 1: Pasang sambungan GdImage Untuk menggunakan sambungan GdImage, anda perlu terlebih dahulu memastikan sambungan itu dipasang.
