diff options
Diffstat (limited to 'plugins/wordpress-importer/parsers/class-wxr-parser.php')
-rw-r--r-- | plugins/wordpress-importer/parsers/class-wxr-parser.php | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/plugins/wordpress-importer/parsers/class-wxr-parser.php b/plugins/wordpress-importer/parsers/class-wxr-parser.php new file mode 100644 index 00000000..dc7cce8f --- /dev/null +++ b/plugins/wordpress-importer/parsers/class-wxr-parser.php @@ -0,0 +1,50 @@ +<?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; + } else if ( 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"; + } else if ( '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 ); + } +} |