update : 2015.11.03
php.shukuma.com

검색:
 
 

여기 있는 많은 예제는 XML 문자열이 필요합니다. 모든 예제에서 문자열을 반복하는 대신에, 각 예제에서 포함하는 파일을 넣어두겠습니다. 이 파일은 다음 예제 섹션에 있습니다. 이 방법 대신, XML 문서를 만들고 simplexml_load_file()으로 읽어올 수도 있습니다.

Example #1 XML 문자열을 가진 포함 파일 example.php

<?php
$xmlstr 
= <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#211;r</actor>
   </character>
  </characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <great-lines>
   <line>PHP solves all my web problems</line>
  </great-lines>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
</movies>
XML;
?>

SimpleXML의 간단함은 기본 XML 문서에서 하나의 문자열이나 숫자를 가져오는 데에서 보여집니다.

Example #2 <plot> 가져오기.

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

echo 
$xml->movie[0]->plot// "So this language. It's like..."
?>

XML 문서 안에 PHP 이름 규칙에 어긋나는 요소(예: 하이픈)에 접근할 때는 요소 이름을 {}과 '로 감쌉니다.

Example #3 <line> 가져오기.

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

echo 
$xml->movie->{'great-lines'}->line// "PHP solves all my web problems"
?>

Example #4 SimpleXML에서 다중 요소에 접근하기.

하나의 부모 요소에 포함되는 여러 개의 자식 요소에 접근할 때는, 일반적인 반복 기술이 적용됩니다.

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

/* 각 <movie> 노드에서, 각각의 <plot>을 출력합니다. */
foreach ($xml->movie as $movie) {
   echo 
$movie->plot'<br />';
}

?>

Example #5 속성 사용하기

여기까지, 요소 이름과 값만을 다뤘습니다. SimpleXML은 요소의 속성에도 접근할 수 있습니다. 요소 속성에 접근할때는 요소를 단순히 array로 취급하면 됩니다.

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

/* 첫번째 movie의 <rating> 노드에 접근합니다.
 * Output the rating scale, too. */
foreach ($xml->movie[0]->rating as $rating) {
    switch((string) 
$rating['type']) { // Get attributes as element indices
    
case 'thumbs':
        echo 
$rating' thumbs up';
        break;
    case 
'stars':
        echo 
$rating' stars';
        break;
    }
}
?>

Example #6 요소와 속성을 텍스트와 비교하기.

요소와 속성을 문자열과 비교하거나, 문자열을 요구하는 함수에 통과시킬 때는 (string)을 사용하여 문자열로 변환해야 합니다. 그렇지 않으면, PHP는 요소를 객체로 취급합니다.

<?php     
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

if ((string) 
$xml->movie->title == 'PHP: Behind the Parser') {
    print 
'My favorite movie.';
}

htmlentities((string) $xml->movie->title);
?>

Example #7 두 요소 비교하기.

PHP 5.2.0부터 두 개의 SimpleXMLElement는 같은 곳을 가르키고 있어도 다른 것으로 간주합니다.

<?php
$el1 
= new SimpleXMLElement($xmlstr);
$el2 = new SimpleXMLElement($xmlstr);
var_dump($el1 == $el2); // PHP 5.2.0 부터 false
?>

Example #8 XPath 사용하기.

SimpleXML은 XPath 지원을 내장하고 있습니다. 모든 <character> 요소를 찾으려면:

<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);

foreach (
$xml->xpath('//character') as $character) {
    echo 
$character->name'played by '$character->actor'<br />';
}
?>

'//'은 와일드카드로 사용됩니다. 절대 경로로 지정하려면, 슬래시 하나를 생략하십시오.

Example #9 값 설정하기.

SimpleXML의 데이터는 바뀔 수 있습니다. SimpleXML은 모든 객체에 대한 변경을 허용합니다.

<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);

$xml->movie[0]->characters->character[0]->name 'Miss Coder';

echo 
$xml->asXML();
?>

위 코드는 원본에서 Ms. Coder를 Miss Coder로 변경한 새 XML 문서를 출력합니다.

Example #10 요소와 속성 추가하기.

PHP 5.1.3부터, SimpleXML은 자식과 속성을 쉽게 추가할 수 있게 되었습니다.

<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);

$character $xml->movie[0]->characters->addChild('character');
$character->addChild('name''Mr. Parser');
$character->addChild('actor''John Doe');

$rating $xml->movie[0]->addChild('rating''PG');
$rating->addAttribute('type''mpaa');

echo 
$xml->asXML();
?>

위 코드는 원본 XML에서 새로운 character와 rating을 추가한 XML 문서를 출력합니다.

Example #11 DOM 상호 작용.

PHP는 XML 노드를 SimpleXML과 DOM 형식으로 변환할 수 있습니다. 이 예제는 DOM 요소를 SimpleXML로 바꾸는 방법을 보여줍니다.

<?php
$dom 
= new domDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!
$dom) {
     echo 
'Error while parsing the document';
     exit;
}

$s simplexml_import_dom($dom);

echo 
$s->book[0]->title;
?>

위 예제의 출력:

blah