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 );
 | 
						|
	}
 | 
						|
}
 |