Login   Register  
PHP Classes
elePHPant
Icontem

File: xmltoarray_parser_htmlfix.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Allan Bogh  >  XML to array parser HTML fix  >  xmltoarray_parser_htmlfix.php  >  Download  
File: xmltoarray_parser_htmlfix.php
Role: Class source
Content type: text/plain
Description: Class to fix HTML special characters within XML
Class: XML to array parser HTML fix
Parse XML with HTML entities and return arrays
Author: By
Last change: Added comment definition to source.
Date: 7 years ago
Size: 4,266 bytes
 

Contents

Class file image Download
<?php

/**
 * xmltoarray_parser_htmlfix creates an associative array of XML values, while fixing
 *    various html special characters so that the xml_parser does not break in the process.
 * @author Allan Bogh - Buckwheat469@hotmail.com
 * @version 1.0
 *
 * Proper usage for xmltoarray_parser_htmlfix class:
 *         $xmltoarray = new xmltoarray_parser_htmlfix(); //create instance of class
 *        $xmltoarray->xmlparser_setoption(XML_OPTION_SKIP_WHITE, 1); //set options same as xml_parser_set_option
 *        $xmltoarray->xmlparser_setoption(XML_OPTION_CASE_FOLDING, 0);
 *        $xmltoarray->xmlparser_fix_into_struct($xmlstring); //fixes html values for XML
 *        $array = $xmltoarray->createArray(); //creates an array with fixed html values
 *        foreach($array as $key => $value){ 
 *            $array[$key] = $xmltoarray->fix_html_entities($value); //returns proper html values
 *        }
 *         
 */
class xmltoarray_parser_htmlfix{
    var 
$values
    var 
$index
    var 
$thearray
    var 
$parser;
    
    
/**
     * Default constructor for xmltoarray_parser_htmlfix.
     */
    
function xmltoarray_parser_htmlfix(){
        
$this->values = array(); 
        
$this->index  = array(); 
        
$this->thearray  = array(); 
        
$this->parser xml_parser_create();
    }
    
    
/**
     * xmlparser_setoption sets XML options based on xml_parser_set_option options.
     * @param $optionName - The name of the option from the xml_parser_set_option list.
     * @param $value - The value to set for the option.
     */
    
function xmlparser_setoption($optionName$value){
        
xml_parser_set_option($this->parser$optionName$value);
    }
    
    
/**
     * xmlparser_fix_into_struct fixes the XML and passes the XML into the struct parser.
     * @param $xml - A string XML value.
     */
    
function xmlparser_fix_into_struct($xml){
        
$trans_table get_html_translation_table(HTML_ENTITIES,ENT_QUOTES);
        
$keys = array();
        foreach(
$trans_table as $key=>$value) {
            if(
$key != "<" && $key != ">" && $key != "&" && $key != "\"" && $key != "'" && $key != " "){
                
$keys[$key] = $value;
            }
        }
        foreach(
$keys as $key=>$value){
            
$xml =  preg_replace("/".$key."/",$value,$xml);
        }
        
$xml =  str_replace("&","%and%",$xml);
        
        
xml_parse_into_struct($this->parser$xml$this->values$this->index);
        
xml_parser_free($this->parser);
    }
    
    
/**
     * createArray creates and returns the array.
     * @return The associative XML array.
     */
    
function createArray(){
        
$i 0
        
$name = isset($this->values[$i]['tag']) ? $this->values[$i]['tag']: ''
        
$this->thearray[$name] = isset($this->values[$i]['attributes']) ? $this->values[$i]['attributes'] : ''
        
$this->thearray[$name] = $this->_struct_to_array($this->values$i); 
        return 
$this->thearray
    }
//createArray
    
    /**
     * _struct_to_array is a recursive function that takes the values and creates the array.
     * @param $values - The values of the XML
     * @param &$i - The index value
     * @return The child
     */
    
function _struct_to_array($values, &$i){
        
$child = array(); 
        if (isset(
$values[$i]['value'])) array_push($child$values[$i]['value']); 
        
        while (
$i++ < count($values)) { 
            if(isset(
$values[$i])){
                switch (
$values[$i]['type']) { 
                    case 
'cdata'
                    
array_push($child$values[$i]['value']); 
                    break; 
                    
                    case 
'complete'
                        
$name $values[$i]['tag']; 
                        if(!empty(
$name)){
                        
$child[$name]= (isset($values[$i]['value']))?($values[$i]['value']):''
                        if(isset(
$values[$i]['attributes'])) {                    
                            
$child[$name] = $values[$i]['attributes']; 
                        } 
                    }    
                    break; 
                    
                    case 
'open'
                        
$name $values[$i]['tag']; 
                        
$size = isset($child[$name]) ? sizeof($child[$name]) : 0;
                        
$child[$name][$size] = $this->_struct_to_array($values$i); 
                    break;
                    
                    case 
'close'
                    return 
$child
                    break; 
                }
            }
        }
        return 
$child
    }
//_struct_to_array

    /**
     * fix_html_entities replaces all instances of '%and%' with '&', since the xml_parser can't handle '&'.
     * @param $string - A string value.
     * @return A fixed string with & instead of %and%.
     */
    
function fix_html_entities($string){
        
$string =  str_replace("%and%","&",$string);
        return 
$string;
    }

}

?>