mirror of
https://github.com/kremalicious/krtmn.git
synced 2024-12-22 17:23:33 +01:00
83 lines
2.8 KiB
PHP
83 lines
2.8 KiB
PHP
|
<?php
|
||
|
/*************************************************************************/
|
||
|
/* This class stores associative arrays in an xml formated string. */
|
||
|
/* There's also a function thar retrieves them. If you try to use */
|
||
|
/* xml2array with a general xml, it can fail, since there can be some */
|
||
|
/* repeated indexes.... */
|
||
|
/* Source: http://www.phpclasses.org/browse/package/2286/ */
|
||
|
/*************************************************************************/
|
||
|
|
||
|
class yourls_array2xml {
|
||
|
var $text;
|
||
|
var $arrays, $keys, $node_flag, $depth, $xml_parser;
|
||
|
/*Converts an array to an xml string*/
|
||
|
function array2xml($array) {
|
||
|
//global $text;
|
||
|
$this->text="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><result>";
|
||
|
$this->text.= $this->array_transform($array);
|
||
|
$this->text .="</result>";
|
||
|
return $this->text;
|
||
|
}
|
||
|
|
||
|
function array_transform($array){
|
||
|
//global $array_text;
|
||
|
foreach($array as $key => $value){
|
||
|
if(!is_array($value)){
|
||
|
//BEGIN code mod by Doug Vanderweide, 13 Jan 2011
|
||
|
//does $value contain html entities?
|
||
|
if(strlen($value) != strlen(htmlentities($value))) {
|
||
|
//if so, encode as CDATA
|
||
|
$value = "<![CDATA[" . htmlentities($value) . "]]>";
|
||
|
}
|
||
|
$this->text .= "<$key>$value</$key>";
|
||
|
//END code mod
|
||
|
} else {
|
||
|
$this->text.="<$key>";
|
||
|
$this->array_transform($value);
|
||
|
$this->text.="</$key>";
|
||
|
}
|
||
|
}
|
||
|
//return $array_text;
|
||
|
|
||
|
}
|
||
|
/*Transform an XML string to associative array "XML Parser Functions"*/
|
||
|
function xml2array($xml){
|
||
|
$this->depth=-1;
|
||
|
$this->xml_parser = xml_parser_create();
|
||
|
xml_set_object($this->xml_parser, $this);
|
||
|
xml_parser_set_option ($this->xml_parser,XML_OPTION_CASE_FOLDING,0);//Don't put tags uppercase
|
||
|
xml_set_element_handler($this->xml_parser, "startElement", "endElement");
|
||
|
xml_set_character_data_handler($this->xml_parser,"characterData");
|
||
|
xml_parse($this->xml_parser,$xml,true);
|
||
|
xml_parser_free($this->xml_parser);
|
||
|
return $this->arrays[0];
|
||
|
|
||
|
}
|
||
|
function startElement($parser, $name, $attrs)
|
||
|
{
|
||
|
$this->keys[]=$name; //We add a key
|
||
|
$this->node_flag=1;
|
||
|
$this->depth++;
|
||
|
}
|
||
|
function characterData($parser,$data)
|
||
|
{
|
||
|
$key=end($this->keys);
|
||
|
$this->arrays[$this->depth][$key]=$data;
|
||
|
$this->node_flag=0; //So that we don't add as an array, but as an element
|
||
|
}
|
||
|
function endElement($parser, $name)
|
||
|
{
|
||
|
$key=array_pop($this->keys);
|
||
|
//If $node_flag==1 we add as an array, if not, as an element
|
||
|
if($this->node_flag==1){
|
||
|
$this->arrays[$this->depth][$key]=$this->arrays[$this->depth+1];
|
||
|
unset($this->arrays[$this->depth+1]);
|
||
|
}
|
||
|
$this->node_flag=1;
|
||
|
$this->depth--;
|
||
|
}
|
||
|
|
||
|
}//End of the class
|
||
|
|
||
|
|
||
|
?>
|