54 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * WordPress eXtended RSS file parser implementations
 | |
|  *
 | |
|  * @package WordPress
 | |
|  * @subpackage Importer
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * WordPress Importer class for managing parsing of WXR files.
 | |
|  */
 | |
| class WXR_Parser {
 | |
| 	function parse( $file ) {
 | |
| 		// Attempt to use proper XML parsers first
 | |
| 		if ( extension_loaded( 'simplexml' ) ) {
 | |
| 			$parser = new WXR_Parser_SimpleXML;
 | |
| 			$result = $parser->parse( $file );
 | |
| 
 | |
| 			// If SimpleXML succeeds or this is an invalid WXR file then return the results
 | |
| 			if ( ! is_wp_error( $result ) || 'SimpleXML_parse_error' != $result->get_error_code() ) {
 | |
| 				return $result;
 | |
| 			}
 | |
| 		} elseif ( extension_loaded( 'xml' ) ) {
 | |
| 			$parser = new WXR_Parser_XML;
 | |
| 			$result = $parser->parse( $file );
 | |
| 
 | |
| 			// If XMLParser succeeds or this is an invalid WXR file then return the results
 | |
| 			if ( ! is_wp_error( $result ) || 'XML_parse_error' != $result->get_error_code() ) {
 | |
| 				return $result;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// We have a malformed XML file, so display the error and fallthrough to regex
 | |
| 		if ( isset( $result ) && defined( 'IMPORT_DEBUG' ) && IMPORT_DEBUG ) {
 | |
| 			echo '<pre>';
 | |
| 			if ( 'SimpleXML_parse_error' == $result->get_error_code() ) {
 | |
| 				foreach ( $result->get_error_data() as $error ) {
 | |
| 					echo $error->line . ':' . $error->column . ' ' . esc_html( $error->message ) . "\n";
 | |
| 				}
 | |
| 			} elseif ( 'XML_parse_error' == $result->get_error_code() ) {
 | |
| 				$error = $result->get_error_data();
 | |
| 				echo $error[0] . ':' . $error[1] . ' ' . esc_html( $error[2] );
 | |
| 			}
 | |
| 			echo '</pre>';
 | |
| 			echo '<p><strong>' . __( 'There was an error when reading this WXR file', 'wordpress-importer' ) . '</strong><br />';
 | |
| 			echo __( 'Details are shown above. The importer will now try again with a different parser...', 'wordpress-importer' ) . '</p>';
 | |
| 		}
 | |
| 
 | |
| 		// use regular expressions if nothing else available or this is bad XML
 | |
| 		$parser = new WXR_Parser_Regex;
 | |
| 		return $parser->parse( $file );
 | |
| 	}
 | |
| }
 |