<?php
class Xml
{
var $data;
var $encoding;
var $arr;
var $pointer;
var $index;
//$path : 파일경로
//$filename : 파일명
//$encoding : UTF-8
function xmlInit($filename, $encoding)
{
$fp = @fsockopen($filename, 80);
if (!$fp)
{
die("XML : {$filename} 을 열수 없습니다.");
}
else
{
while (!feof($fp)) {
$data .= fgets ($fp,128);
}
fclose ($fp);
}
$this->encoding = $encoding;
$this->data = $data;
}
function xmlData()
{
$this->index = 0;
$this->pointer[] = &$this->arr;
$xml_parser = xml_parser_create($this->encoding);
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
xml_set_object($xml_parser, &$this);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_parse($xml_parser, $this->data, true );
xml_parser_free($xml_parser);
}
function startElement($parser, $tag, $attribute)
{
foreach($attribute as $name => $value)
{
$value = $this->cleanString($value);
$object->$name = $value;
}
eval( "\$this->pointer[\$this->index]->" . $tag . "[] = \$object;");
eval( "\$size = sizeof( \$this->pointer[\$this->index]->" . $tag . ");" );
eval( "\$this->pointer[] = &\$this->pointer[\$this->index]->" . $tag . "[\$size-1];" );
$this->index++;
}
function endElement($parser, $tag)
{
array_pop($this->pointer);
$this->index--;
}
function characterData($parser, $data)
{
if(trim($data)) $this->pointer[$this->index] = trim($data);
}
function cleanString($string)
{
return utf8_decode(trim($string));
}
}
?>
< ?php
class Xml
{
var $tag;
var $value;
var $attributes;
var $next;
}
function xml2array($xml_string)
{
$Parser = xml_parser_create();
xml_parser_set_option($Parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($Parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($Parser, $xml_string, $Xml_Values);
xml_parser_free($Parser);
$XmlClass = array();
$LastObj = array();
$NowObj = &$XmlClass;
foreach($Xml_Values as $Xml_Key => $Xml_Value)
{
$Index = count($NowObj);
if($Xml_Value["type"] == "complete")
{
$NowObj[$Index] = new Xml;
$NowObj[$Index]->tag = $Xml_Value["tag"];
$NowObj[$Index]->value = $Xml_Value["value"];
$NowObj[$Index]->attributes = $Xml_Value["attributes"];
}
elseif($Xml_Value["type"] == "open")
{
$NowObj[$Index] = new Xml;
$NowObj[$Index]->tag = $Xml_Value["tag"];
$NowObj[$Index]->value = $Xml_Value["value"];
$NowObj[$Index]->attributes = $Xml_Value["attributes"];
$NowObj[$Index]->next = array();
$LastObj[count($LastObj)] = &$NowObj;
$NowObj = &$NowObj[$Index]->next;
}
elseif($Xml_Value["type"] == "close")
{
$NowObj = &$LastObj[count($LastObj) - 1];
unset($LastObj[count($LastObj) - 1]);
}
}
return $XmlClass;
}
?>
< ?php
class xmlParse
{
var $node = array();
var $xmlParser;
var $result;
var $temp;
var $cou_node;
function xmlParse($data,$type=1)
{
// Unset variable
unset($this->xmlParser);
unset($this->result);
// Create XML Parser
$this->xmlParser = xml_parser_create();
// Set handler
xml_set_object($this->xmlParser,&$this);
xml_set_element_handler($this->xmlParser, "startElement", "endElement");
xml_set_character_data_handler($this->xmlParser, "characterData");
// File
if($type==2)
{
if(!($temp = file($data)))
{
die("could not open XML input");
}
$fdata = join('',$temp);
$fdata = str_replace("\n",'',$fdata);
$fdata = str_replace("\r",'',$fdata);
$fdata = str_replace(" ",'',$fdata);
$fdata = trim($fdata);
if(!xml_parse($this->xmlParser,$fdata)) return 0;
// Variable
} elseif($type==1)
{
// Parsing
if(!xml_parse($this->xmlParser,$data)) return 0;
}
}
// Return
function ret()
{
// return Array
return $this->result;
}
/////////////////////////////////////////////////////////////////////////////
// private
/////////////////////////////////////////////////////////////////////////////
function startElement($parser, $name, $attribs)
{
// Add node, Clear TEMP
array_push($this->node, $name);
unset($this->temp);
// Count nodes
$count = count($this->node);
$this->{'cou_'.$count.'_'.$this->node[$count-1]}++;
// Create String What is for Eval
for($i=0;$i<$count;$i++)
{
$this->temp.='[\''.$this->node[$i].'\']['.$this->{'cou_'.($i+1).'_'.$this->node[$i]}.']';
}
$string = $this->temp;
eval('$this->result'.$string.'="";');
if (count($attribs)) {
while (list($k, $v) = each($attribs)) {
eval('$this->result'.$string.'[\''.$k.'\']="'.$v.'";');
}
}
}
// private
function endElement($parser, $name)
{
$count = count($this->node);
$count++;
$this->{'cou_'.$count.'_'.$this->node[$count]} = 0;
unset($this->temp);
array_pop($this->node);
}
// private
function characterData($parser, $data)
{
$string = $this->temp;
eval('$this->result'.$string.'="'.$data.'";');
}
}
?>
'PHP∵SCRIPT' 카테고리의 다른 글
정규식 1차 도메인만 추출 (0) | 2014.04.28 |
---|---|
반드시 알아아 할 PHP 보안 30 가지 (0) | 2014.04.24 |
HTML 웹문서의 TAG 지우고 본문만 남기기, php 명령모드에서 실행하기 (0) | 2014.04.24 |
Mysql 날짜/시간 관련 함수 (0) | 2014.04.24 |
주민등록번호 유효성 검사 (0) | 2014.04.22 |
> 로 시작해서 </ 로 끝나는 부분만 추출하기 (0) | 2014.04.22 |
PHP 처리속도 올리기 (0) | 2014.04.21 |
팝업창으로 폼값 전송하기 (0) | 2014.04.21 |
댓글