PHP Classes
Icontem

File: xmltoarray_parser_htmlfix.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet 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  
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
 

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

}

?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products