-
-
#-------------------- --------- - #
- # XML 라이브러리, Keith Devens 작성, 버전 1.2b
- # http://keithdevens.com/software/phpxml
- #
- # 이 코드는 오픈 소스이며 예술 라이선스와 유사한 조건에 따라 공개됩니다.
- # http://keithdevens.com/software/license에서 라이센스를 읽어보세요.
- #
- #--------------------------------------------
- # XML_unserialize: 원시 XML을 매개변수(문자열)로 사용합니다.
- # 동등한 PHP 데이터 구조를 반환합니다.
- #------------------- ----------
- 함수 & XML_unserialize(&$xml){
- $xml_parser = &new XML();
- $data = &$xml_parser->parse($xml);
- $xml_parser->destruct();
- $data를 반환합니다.
- }
- ------------#####
- # XML_serialize: 모든 PHP 데이터 구조를 XML로 직렬화합니다.
- # 하나의 매개변수, 즉 직렬화할 데이터를 사용합니다. 배열이어야 합니다.
- ----------#
- 함수 & XML_serialize(&$data, $level = 0, $prior_key = NULL){
- if($level == 0){ ob_start(); echo '',"n"; }
- while(list($key, $value) = Each($data))
- if(!strpos($key, ' attr')) # 속성이 아닌 경우
- #하지 않습니다. 속성 자체를 처리하지 않으므로 속성이 있는 빈 요소
- #의 경우 해당 요소를 NULL
로 설정해야 합니다. if(is_array($value) 및 array_key_exists(0, $value)){
- XML_serialize($value, $level, $key);
- }else{
- $tag = $prior_key ? $prior_key : $키;
- echo str_repeat("t", $level),'<',$tag;
- if(array_key_exists("$key attr", $data)){ # 이 요소에 대한 속성이 있는 경우
- while(list($attr_name, $attr_value) = Each($data["$key attr" ]))
- echo ' ',$attr_name,'="',htmlspecialchars($attr_value),'"';
- 재설정($data["$key attr"]);
- }
if(is_null($value)) echo " />n";
- elseif(!is_array($value)) echo '>',htmlspecialchars($value),"$tag>n";
- else echo ">n",XML_serialize($value, $level 1),str_repeat("t", $level),"$tag>n";
- }
- 재설정($data);
- if($level == 0){ $str = &ob_get_contents(); ob_end_clean(); $str을 반환; }
- }
- #----------#
- # XML 클래스: PHP의 XML 처리 기능과 함께 사용되는 유틸리티 클래스
- #----------#
- class XML{
- var $parser; #XML 파서에 대한 참조
- var $document; #지금까지 구축된 전체 XML 구조
- var $parent; # 현재 부모에 대한 포인터 - 부모는 배열이 됩니다.
- var $stack; #각 중첩 수준에서 가장 최근 상위 항목의 스택
- var $last_opened_tag; #마지막으로 열린 태그를 추적합니다.
function XML(){
- $this->parser = &xml_parser_create();
- xml_parser_set_option(&$this->파서, XML_OPTION_CASE_FOLDING, false);
- xml_set_object(&$this->parser, &$this);
- xml_set_element_handler(&$this->parser, 'open','close');
- xml_set_character_data_handler(&$this->parser, 'data');
- }
- function destruct(){ xml_parser_free(&$this->parser); }
- 함수 & 구문 분석(&$data){
- $this->document = array();
- $this->스택 = 배열();
- $this->parent = &$this->문서;
- return xml_parse(&$this->parser, &$data, true) ? $this->문서: NULL;
- }
- 함수 열기(&$parser, $tag, $attributes){
- $this->data = ''; #임시 cdata 저장
- $this->last_opened_tag = $tag;
- if(is_array($this->parent) and array_key_exists($tag,$this->parent)){ #이 태그를 이전에 본 경우
- if(is_array($this-> parent[$tag]) and array_key_exists(0,$this->parent[$tag])){ # 키가 숫자인 경우
- #이것은 우리가 발견한 $tag의 세 번째 또는 이후 인스턴스입니다.
- $key = count_numeric_items($this->parent[$tag]);
- }else{
- #이것은 우리가 본 $tag의 두 번째 인스턴스입니다.
- 주위로 이동 if(array_key_exists("$tag attr",$this->parent)){
- $arr = array('0 attr'=>&$this->parent["$tag attr"], &$this->parent[$tag]);
- unset($this->parent["$tag attr"]);
- }else{
- $arr = array(&$this->parent[$tag]);
- }
- $this->parent[$tag] = &$arr;
- $키 = 1;
- }
- $this->parent = &$this->parent[$tag];
- }else{
- $key = $tag;
- }
- if($attributes) $this->parent["$key attr"] = $attributes;
- $this->parent = &$this->parent[$key];
- $this->stack[] = &$this->parent;
- }
- function data(&$parser, $data){
- if($this->last_opened_tag != NULL) # 태그 사이에 공백을 저장할 필요가 없습니다
- $this ->데이터 .= $데이터;
- }
- 함수 닫기(&$parser, $tag){
- if($this->last_opened_tag == $tag){
- $this->parent = $this-> 데이터;
- $this->last_opened_tag = NULL;
- }
- array_pop($this->stack);
- if($this->stack) $this->parent = &$this->stack[count($this->stack)-1];
- }
- }
- function count_numeric_items(&$array){
- return is_array($array) ? count(array_filter(array_keys($array), 'is_numeric')) : 0;
- }
- ?>
-
复主代码
응용 사례, XML 소스 주소: http://data.cnaz.com/spread/?tid=7&sid=42845&order=date&flags=desc&num=50
&page=1&hosts=pic.ttiankan.com&code=xml
-
-
include('xml.php') //참조 PHP XML 작업 클래스< p>
$page=$_GET['page'];
if(empty($page) || !is_numeric($page)) $ 페이지 =1;
//아이돌스타
- $xml = file_get_contents('http://data.cnaz.com/spread/?tid=7&sid=42845&order=date&flags= desc&num =50
- &page='.$page.'&hosts=pic.ttiankan.com&code=xml');
- //$xml = file_get_contents("php : //input"); //POST에서 입력 스트림 읽기
- $data=XML_unserialize($xml);
$item=$data['rss'] [' 채널'];
$link = $item['link'];
- $description= $item['description'];
- $keywords = $ 항목[ '키워드'];
- $totalnum = $item['totalnum'];
- $usetime = $item['usetime'];
$totalpage= ceil( $totalnum/50);
echo(' 키워드:'.$keywords.' ');
- echo('총 레코드 수:'.$totalnum.', 각 페이지에 50개의 레코드가 표시되며 총 레코드는'.$ totalpage.' 페이지, 현재 페이지 '.$page.'
');
$item=$item['item'];
echo('
-
- *{font-size:12px;color:#000;font-family:arial;}
- a{text-장식:none; }
- a:hover{텍스트 장식:밑줄;}
- .tbl{border-top:1px #ccc solid;border-left:1px #ccc solid;}
- .tbl td{padding:4px 5px ;border-bottom:1px #ccc solid;border-right:1px #ccc solid;}
-
- ');
echo('
-
-
-
분류 td>
-
제목 |
-
링크 |
-
|
- ');
- < p> foreach($item as $list)
- {
- echo('
');
- echo('
'.$list['sort'].' < /td>');
- echo('
'.$list['title'].' | ');
- echo('
'.$list['link'].' | ');
- echo(' tr> ');
- }
echo('
-
- ');
- if( $page>1) echo('이전 페이지 ');
- if ($page< $totalpage) echo('다음 페이지>');
- echo( '
| ');
echo(' | |