文章介绍了三种方式来读取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( "//<book/>(.*?)/<//book/>/s",
- $xml, $bookblocks );
-
- foreach( $bookblocks[1] as $block )
- {
- preg_match_all( "//<author/>(.*?)/<//author/>/",
- $block, $author );
- preg_match_all( "//<title/>(.*?)/<//title/>/",
- $block, $title );
- preg_match_all( "//<publisher/>(.*?)/<//publisher/>/",
- $block, $publisher );
- echo( $title[1][0]." - ".$author[1][0]." - ".
- $publisher[1][0]."/n" );
- }
- ?>
books.xml文件如下:
- <books>
- <book>
- <author>Jack Herrington</author>
- <title>PHP Hacks</title>
- <publisher>O'Reilly</publisher>
- </book>
- <book>
- <author>Jack Herrington</author>
- <title>Podcasting Hacks</title>
- <publisher>O'Reilly</publisher>
- </book>
- </books>
下面就给大家举一个小小的例子用parser函数来读取xml数据,代码如下:
- <?php
- $parser = xml_parser_create();
- xml_set_element_handler($parser, "startElement", "endElement");
- xml_set_character_data_handler($parser, "characterData");
- $xml_file="1.xml";
- $filehandler = fopen($xml_file, "r");
- while ($data = fread($filehandler, 4096))
- {
- xml_parse($parser, $data, feof($filehandler));
- }
-
- fclose($filehandler);
- xml_parser_free($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."<br>";
- if($name)
- echo $xml_data."<br>";
- }
-
- function endElement($parser_instance, $element_name)
- {
- global $name,$position;
- $name=false;
- $position=false;
- }
-
- ?>
xml文件代码如下:
- <?xml version="1.0"?>
- <employees>
- <employee>
- <name>张三</name>
- <position age="45">经理</position>
- </employee>
- <employees>
- <employee>
- <name>李四</name>
- <position age="45">助理</position>
- </employee>
- </employees>
parser是php内置的一个用来处理xml的解析器,它的工作由三个事件组成:起始标签、 读取数据、结束标签.
也就是说在对xml进行处理的时候每当遇到起始标签、数据和结束标签的时候函数会做相应的动作来完成对xml数据的转换. |