'php'에 해당되는 글 1건

  1. 2010/01/22 XML 테스트[SimpleXMLElement & simplexml_load_file] (php5.x)
drink 2010/01/22 22:04
XML 테스트는 XML문서를 어떻게 만들고 어떻게 화면에 표출하는가에 대한 예를 보기위해 공부하면서 몇자 적어본다.

본 예제는 php를 기준으로 하며 php5에 갖고 있는 libxml2 인 xml pasher를 기준으로 설명해본다.

xml 문서 작성

XML의 시작은 아래처럼 구문이 들어가야만 XML이 시작된다고 보면된다.
<?xml version='1.0' standalone='yes'?>

XML 문서는 html 문서와 유사한면이 있기도 하다. html 문서 작성하듯 xml 문서 역시 시작과 끝이 있다.

<구분자> 데이터 </구분자>
or
<구분자 type="type 데이터"> 데이터 </구분자>

이렇게 "구분자"로 시작해 끝낼때는 /로 시작하는 "구분자"를 넣어주면 된다.

이 데이터를 처리하는 몇가지 function을 살펴보자.

xml 파일을 읽어들이기
$xml=simplexml_load_file("filename");

PHP내의 xml string을 읽어들이기
$xml=SimpleXMLElement($xml_string);

구분자의 갯수 얻기
$p_cnt=count($xml->구분자);

xml 내용을 화면에 출력하기(array형식에 맞춰)
print_r($xml)

구분자의 내용을 출력하기
$xml->구분자->sub_구분자
or
$xml->구분자->{'sub_구분자'}

{' '}을 쓰는경우는 구분자만 쓸때 기호 에러(특수기호때문에)가 나면 이것으로 묶어서 구분자임을 알려준다.

구분자를 type 등으로 분류를 해줄경우 type의 형태를 출력
$xml->구분자['type'];
"type_데이터"가 출력됨.
이런 형태의 구분자의 데이터 출력
"$xml->구분자['type']"이 원하는 것일경우의 "$xml->구분자"가 데이터 출력됨.

linux 경로처럼 xml data tree 구조를 path로 사용한다.
$xml->xpath(/구분자1/구분자2/구분자3);  // 절대 경로
$xml->xpath(구분자2/구분자3); //상대경로




간단한 예로 책에 대해 보면

<?xml version='1.0' standalone='yes'?>
<library>
   
<book>
       
<name>손오공</name>
       
<price>1000</price>
       
<unit></unit>
       
<date type="년">2009</date>
       
<date type="월">10</date>
       
<date type="일">4</date>
     
</book>
   
<book>
       
<name>이상한나라</name>
       
<price>1</price>
       
<unit>만원</unit>
       
<date type="년">2009</date>
       
<date type="월">10</date>
       
<date type="일">4</date>
     
</book>
</library>

xml 데이터를 읽어들이는것은 아래처럼 simplexml_load_file과 같은 Class로 읽어들인다.

$xml = simplexml_load_file('ex.xml');
print_r
($xml); // xml의 구조를 화면에 출력한다.
echo
"<br><br><hr><br>";
echo $xml
->book[1]->{'name'}; //구분자 "name"의 값을 출력한다.

//책 "손오공"의 date를 년월일을 출력한다.
foreach ($xml->book[0]->date as $date) {
   
switch((string) $date['type']) {
   
case '년':
       echo $date
, '년';
       
break;
   
case '월':
       echo $date
, '월';
       
break;
   
case '일':
       echo $date
, '일';
       
break;
   
}
}

간단한 예로 위에서 했던것을 php속의 string으로 넣어보자.

<?php
$xmlstr
= <<<XML
<?xml version='1.0' standalone='yes'?>
<library>
   
<book>
       
<name>손오공</name>
       
<price>1000</price>
       
<unit></unit>
       
<date type="년">2009</date>
       
<date type="월">10</date>
       
<date type="일">4</date>
     
</book>
   
<book>
       
<name>이상한나라</name>
       
<price>1</price>
       
<unit>만원</unit>
       
<date type="년">2009</date>
       
<date type="월">10</date>
       
<date type="일">4</date>
     
</book>
</library>
XML;
?>

이렇게 만들고 아래처럼 불러들여 사용한다.

<?php
include
'ex.php';
 
$xml
= new SimpleXMLElement($xmlstr);
//xml 코드들
?>


xpath 예제

<?
$xml
=simplexml_load_file('test.xml');
$groups
=Array(a,b,c,d);

for($z=0;$z<sizeof($groups);$z++) {
   $result
=$xml->xpath("a/$groups[$z]/name");
   
while(list( ,$node) =each($result)) {
       $result2
=$xml->xpath("a/$groups[$z]/$node");
       
while(list( ,$node2)=each($result2)) {
          echo
"a/$groups[$z]/$node/".$node2['type']. ":". $node2."<br>";
       
}
   
}
}
?>
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/01/22 22:04 2010/01/22 22:04

Trackback Address : http://1go.co.kr/blog/trackback/3330

[로그인][오픈아이디란?]