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