xmlrpc를 해석하여 object로 return 하는 simple xml parser 더 자세히 ...

Public 멤버 함수 | |
| loadXmlFile ($filename) | |
| xml 파일을 로딩하여 parsing 처리 후 return | |
| parse ($input= '') | |
| xml 파싱 | |
| _tagOpen ($parser, $node_name, $attrs) | |
| 태그 오픈 | |
| _tagBody ($parser, $body) | |
| body 내용 | |
| _tagClosed ($parser, $node_name) | |
| 태그 닫음 | |
| _arrToObj ($arr) | |
| 파싱한 결과를 object vars에 담기 위한 method | |
Public 속성 | |
| $oParser = NULL | |
| xml parser | |
| $input = NULL | |
| input xml | |
| $output = array() | |
| output object | |
| $lang = "en" | |
| 기본 언어타입 | |
xmlrpc를 해석하여 object로 return 하는 simple xml parser
xml 데이터의 attribute중에 xml:lang="ko,en,ch,jp,..." 이 있을 경우 지정된 lang 값에 해당하는 것만 남기는 트릭이 적용됨. 무슨 문제를 일으킬지는 현재 모르나 잘 동작하고 있음
XmlParser.class.php 파일의 12 번째 라인에서 정의되었습니다.
| XmlParser::_arrToObj | ( | $ | arr | ) |
파싱한 결과를 object vars에 담기 위한 method
XmlParser.class.php 파일의 125 번째 라인에서 정의되었습니다.
다음을 참조함 : $output.
다음에 의해서 참조됨 : _tagOpen().
| XmlParser::_tagBody | ( | $ | parser, | |
| $ | body | |||
| ) |
body 내용
XmlParser.class.php 파일의 93 번째 라인에서 정의되었습니다.
| XmlParser::_tagClosed | ( | $ | parser, | |
| $ | node_name | |||
| ) |
태그 닫음
XmlParser.class.php 파일의 101 번째 라인에서 정의되었습니다.
00101 { 00102 $node_name = strtolower($node_name); 00103 $cur_obj = array_pop($this->output); 00104 $parent_obj = &$this->output[count($this->output)-1]; 00105 if($this->lang&&$cur_obj->attrs->{'xml:lang'}&&$cur_obj->attrs->{'xml:lang'}!=$this->lang) return; 00106 if($this->lang&&$parent_obj->{$node_name}->attrs->{'xml:lang'}&&$parent_obj->{$node_name}->attrs->{'xml:lang'}!=$this->lang) return; 00107 00108 if($parent_obj->{$node_name}) { 00109 $tmp_obj = $parent_obj->{$node_name}; 00110 if(is_array($tmp_obj)) { 00111 array_push($parent_obj->{$node_name}, $cur_obj); 00112 } else { 00113 $parent_obj->{$node_name} = array(); 00114 array_push($parent_obj->{$node_name}, $tmp_obj); 00115 array_push($parent_obj->{$node_name}, $cur_obj); 00116 } 00117 } else { 00118 $parent_obj->{$node_name} = $cur_obj; 00119 } 00120 }
| XmlParser::_tagOpen | ( | $ | parser, | |
| $ | node_name, | |||
| $ | attrs | |||
| ) |
태그 오픈
XmlParser.class.php 파일의 83 번째 라인에서 정의되었습니다.
다음을 참조함 : _arrToObj().
00083 { 00084 $obj->node_name = strtolower($node_name); 00085 $obj->attrs = $this->_arrToObj($attrs); 00086 00087 array_push($this->output, $obj); 00088 }

| XmlParser::loadXmlFile | ( | $ | filename | ) |
xml 파일을 로딩하여 parsing 처리 후 return
XmlParser.class.php 파일의 24 번째 라인에서 정의되었습니다.
다음을 참조함 : $oXmlParser, FileHandler::readFile().
다음에 의해서 참조됨 : moduleModel::getModuleActionXml().
00024 { 00025 if(!file_exists($filename)) return; 00026 $buff = FileHandler::readFile($filename); 00027 00028 $oXmlParser = new XmlParser(); 00029 return $oXmlParser->parse($buff); 00030 }

| XmlParser::parse | ( | $ | input = '' |
) |
xml 파싱
XmlParser.class.php 파일의 35 번째 라인에서 정의되었습니다.
다음을 참조함 : $GLOBALS, $input, $output, Context::getLangType(), getMicroTime().
다음에 의해서 참조됨 : XmlJsFilter::_compile().
00035 { 00036 // 디버그를 위한 컴파일 시작 시간 저장 00037 if(__DEBUG__==3) $start = getMicroTime(); 00038 00039 $this->lang = Context::getLangType(); 00040 00041 $this->input = $input?$input:$GLOBALS['HTTP_RAW_POST_DATA']; 00042 00043 // 지원언어 종류를 뽑음 00044 preg_match_all("/xml:lang=\"([^\"].+)\"/i", $this->input, $matches); 00045 00046 // xml:lang이 쓰였을 경우 지원하는 언어종류를 뽑음 00047 if(count($matches[1]) && $supported_lang = array_unique($matches[1])) { 00048 // supported_lang에 현재 접속자의 lang이 없으면 en이 있는지 확인하여 en이 있으면 en을 기본, 아니면 첫번째것을.. 00049 if(!in_array($this->lang, $supported_lang)) { 00050 if(in_array('en', $supported_lang)) { 00051 $this->lang = 'en'; 00052 } else { 00053 $this->lang = array_shift($supported_lang); 00054 } 00055 } 00056 // 특별한 언어가 지정되지 않았다면 언어체크를 하지 않음 00057 } else { 00058 unset($this->lang); 00059 } 00060 00061 $this->oParser = xml_parser_create('UTF-8'); 00062 00063 xml_set_object($this->oParser, $this); 00064 xml_set_element_handler($this->oParser, "_tagOpen", "_tagClosed"); 00065 xml_set_character_data_handler($this->oParser, "_tagBody"); 00066 00067 xml_parse($this->oParser, $this->input); 00068 xml_parser_free($this->oParser); 00069 00070 if(!count($this->output)) return; 00071 00072 $output = array_shift($this->output); 00073 00074 // 디버그를 위한 컴파일 시작 시간 저장 00075 if(__DEBUG__==3) $GLOBALS['__xmlparse_elapsed__'] += getMicroTime() - $start; 00076 00077 return $output; 00078 }

| XmlParser::$input = NULL |
| XmlParser::$lang = "en" |
기본 언어타입
XmlParser.class.php 파일의 19 번째 라인에서 정의되었습니다.
다음에 의해서 참조됨 : XmlJsFilter::_compile(), XmlQueryParser::parse().
| XmlParser::$oParser = NULL |
xml parser
XmlParser.class.php 파일의 14 번째 라인에서 정의되었습니다.
| XmlParser::$output = array() |
output object
XmlParser.class.php 파일의 17 번째 라인에서 정의되었습니다.
다음에 의해서 참조됨 : XmlQueryParser::parse(), parse().
1.6.1