使用 DOM 库读取 XML
- <?php
- $doc = new DOMDocument();
- $doc->load( '1.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";
- }
- ?>
用 SAX 解析器读取 XML
用正则表达式解析 XML;
- <?php
- $g_books = array();
- $g_elem = null;
- function startElement( $parser, $name, $attrs )
- {
- global $g_books, $g_elem;
- if ( $name == 'BOOK' ) $g_books []= array();
- $g_elem = $name;
- }
- function endElement( $parser, $name )
- {
- global $g_elem;
- $g_elem = null;
- }
- function textData( $parser, $text )
- {
- global $g_books, $g_elem;
- if ( $g_elem == 'AUTHOR' ||
- $g_elem == 'PUBLISHER' ||
- $g_elem == 'TITLE' )
- {
- $g_books[ count( $g_books ) - 1 ][ $g_elem ] = $text;
- }
- }
- $parser = xml_parser_create();
- xml_set_element_handler( $parser, "startElement", "endElement" );
- xml_set_character_data_handler( $parser, "textData" );
- $f = fopen( '1.xml', 'r' );
- while( $data = fread( $f, 4096 ) )
- {
- xml_parse( $parser, $data );
- }
- xml_parser_free( $parser );
- foreach( $g_books as $book )
- {
- echo $book['TITLE']." - ".$book['AUTHOR']." - ";
- echo $book['PUBLISHER']."\n";
- }
- ?>
- <?php
- $xml = "";
- $f = fopen( '1.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" );
- }
- ?>