文章介绍了三种方式来读取 xml 文件分别是 new DOMDocument(), 正则解析 xml, 用 parser 函数来读取 xml 数据, 这些方法都是可行的, 但第一种和最后一种要好一些.
new DOMDocument() 实例代码如下:
- <?php
- $doc = new DOMDocument();
- $doc--->load('books.xml');
- $books = $doc->getElementsByTagName("book");
- foreach ($books as $book) {
- $authors = $book->getElementsByTagName("author");
- $author = $authors->item(0)->nodeValue;
- $publishers = $book->getElementsByTagName("publisher");
- $publisher = $publishers->item(0)->nodeValue;
- $titles = $book->getElementsByTagName("title");
- $title = $titles->item(0)->nodeValue;
- echo "$title - $author - $publisher/n";
- }
- ?>
正则解析, 代码如下:
- <?php
- $xml = "";
- $f = fopen('books.xml', 'r');
- while ($data = fread($f, 4096)) {
- $xml.= $data;
- }
- fclose($f);
- preg_match_all("//(.*?)//s", $xml, $bookblocks);
- foreach ($bookblocks[1] as $block) {
- preg_match_all("//(.*?)//", $block, $author);
- preg_match_all("//
- O'Reilly
- Jack Herrington
- O'Reilly
下面就给大家举一个小小的例子用 parser 函数来读取 xml 数据, 代码如下:
- <?php
- $parser = xml_parser_create(); // 创建一个 parser 编辑器
- xml_set_element_handler($parser, "startElement", "endElement"); // 设立标签触发时的相应函数 这里分别为 startElement 和 endElenment
- xml_set_character_data_handler($parser, "characterData"); // 设立数据读取时的相应函数
- $xml_file = "1.xml"; // 指定所要读取的 xml 文件, 可以是 url
- $filehandler = fopen($xml_file, "r"); // 打开文件
- while ($data = fread($filehandler, 4096)) {
- xml_parse($parser, $data, feof($filehandler));
- } // 每次取出 4096 个字节进行处理
- fclose($filehandler);
- xml_parser_free($parser); // 关闭和释放 parser 解析器
- $name = false;
- $position = false;
- function startElement($parser_instance, $element_name, $attrs) // 起始标签事件的函数
- {
- global $name, $position;
- if ($element_name == "NAME") {
- $name = true;
- $position = false;
- echo "名字:";
- }
- if ($element_name == "POSITION") {
- $name = false;
- $position = true;
- echo "职位:";
- }
- }
- function characterData($parser_instance, $xml_data) // 读取数据时的函数
- {
- global $name, $position;
- if ($position) echo $xml_data . "";
- if ($name) echo $xml_data . "
- ";
- }
- function endElement($parser_instance, $element_name) // 结束标签事件的函数
- {
- global $name, $position;
- $name = false;
- $position = false;
- }
- ?>
xml 文件代码如下:
<?xml version="1.0"
张三
经理
李四
助理
parser 是 php 内置的一个用来处理 xml 的解析器, 它的工作由三个事件组成: 起始标签 读取数据结束标签.
也就是说在对 xml 进行处理的时候每当遇到起始标签数据和结束标签的时候函数会做相应的动作来完成对 xml 数据的转换.
来源: https://www.php1.cn/detail/php-89f6c6e9c2.html