SimpleXML 확장은 일반 속성 선택기를 사용하여 XML을 XML 파일로 변환할 수 있는 매우 간단하고 사용하기 쉬운 도구 세트를 제공합니다. 배열 반복자를 위한 객체입니다.
이 확장에는 libxml PHP 확장이 필요합니다. 이는 --enable-libxml을 사용해야 함을 의미합니다. 단, libxml이 기본적으로 활성화되어 있으므로 이 작업은 암시적으로 수행됩니다.
PHP5 이상이 필요합니다.
이 확장은 기본적으로 활성화되어 있으며 컴파일 시 다음 옵션을 통해 비활성화할 수 있습니다: --disable-simplexml
예제 #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Ó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에서 문자열이나 숫자를 추출할 때 가장 분명하게 나타납니다. document.
예제 #2
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie[0]->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.
요소 액세스 PHP의 명명 규칙(예: 하이픈)에서 허용되지 않는 문자가 포함된 XML 문서 내에서는 중괄호와 아포스트로피 안에 요소 이름을 캡슐화하여 수행할 수 있습니다.
예제 #3 < line>
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie->{'great-lines'}->line;?>
위 루틴은 다음을 출력합니다:
PHP solves all my web problems
예 #4 SimpleXML의 고유하지 않은 요소에 액세스
요소의 여러 인스턴스가 단일 상위 요소의 하위 요소로 존재하는 경우 일반적인 반복 기술이 적용됩니다.
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); /* For each <character> node, we echo a separate <name>. */foreach ($movies->movie->characters->character as $character) { echo $character->name, ' played by ', $character->actor, PHP_EOL;} ?>
위 루틴은 다음을 출력합니다.
Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr
참고:
속성(이전 예의 $movies->movie)은 배열이 아니며 반복 가능하고 액세스 가능한 객체입니다.
예제 #5 특성 사용
지금까지는 요소 이름과 해당 값을 읽는 작업만 다루었습니다. SimpleXML은 배열 요소와 마찬가지로 요소 속성에 액세스할 수도 있습니다.
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); /* Access the <rating> nodes of the first movie.* Output the rating scale, too. */ foreach ($movies->movie[0]->rating as $rating) { switch((string) $rating['type']) { // Get attributes as element indicescase 'thumbs':echo $rating, ' thumbs up'; break;case 'stars':echo $rating, ' stars';break;}} ?>
위 루틴은 다음을 출력합니다. :
7 thumbs up5 stars
예 #6 요소 및 속성을 텍스트와 비교
요소나 속성을 문자열과 비교하거나 문자열이 필요한 함수에 전달하려면 (string)을 사용하여 문자열로 변환해야 합니다. 그렇지 않으면 PHP는 요소를 객체로 처리합니다.
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); if ((string) $movies->movie->title == 'PHP: Behind the Parser') {print 'My favorite movie.';} echo htmlentities((string) $movies->movie->title);?>
위 루틴은 다음을 출력합니다:
My favorite movie.PHP: Behind the Parser
예제 #7 두 요소 비교
두 개의 SimpleXMLElement는 PHP 5.2.0부터 동일한 요소를 가리키더라도 서로 다른 것으로 간주됩니다.
<?phpinclude 'example.php'; $movies1 = new SimpleXMLElement($xmlstr);$movies2 = new SimpleXMLElement($xmlstr); var_dump($movies1 == $movies2); // false since PHP 5.2.0?>
위 루틴은 다음을 출력합니다.
bool(false)
예 #8 XPath 사용
SimpleXML에는 모든 >//'을 찾기 위한 기본 지원이 포함되어 있으며 절대 경로를 지정하려면 하나를 생략하세요.
위 루틴은 다음을 출력합니다.<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); foreach ($movies->xpath('//character') as $character) { echo $character->name, 'played by ', $character->actor, PHP_EOL;}?>
Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr
<?phpinclude 'example.php';$movies = new SimpleXMLElement($xmlstr); $movies->movie[0]->characters->character[0]->name = 'Miss Coder'; echo $movies->asXML();?>
예 #10 요소 및 속성 추가
PHP 5.1.3부터 SimpleXML에는 하위 항목과 속성을 쉽게 추가하는 기능이 있습니다.PHP: Behind the Parser Miss Coder Onlivia Actora Mr. Coder El ActÓr 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. PHP solves all my web problems 7 5
<?phpinclude 'example.php';$movies = new SimpleXMLElement($xmlstr); $character = $movies->movie[0]->characters->addChild('character');$character->addChild('name', 'Mr. Parser'); $character->addChild('actor', 'John Doe'); $rating = $movies->movie[0]->addChild('rating', 'PG');$rating->addAttribute('type', 'mpaa'); echo $movies->asXML();?>
예제 #11 DOM 상호 운용성
PHP에는 SimpleXML과 DOM 형식 간에 XML 노드를 변환하는 메커니즘이 있습니다. 이 예에서는 DOM 요소를 SimpleXML로 변경하는 방법을 보여줍니다.PHP: Behind the Parser Ms. Coder Onlivia Actora Mr. Coder El ActÓr Mr. Parser John Doe 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. PHP solves all my web problems 7 5 PG
<?php$dom = new DOMDocument;$dom->loadXML('<books><book> <title>blah</title></book></books>');if (!$dom) {echo 'Error while parsing the document';exit;} $books = simplexml_import_dom($dom); echo $books->book[0]->title;?>
예제 1 깨진 XML 문자열 로드
blah
<?php libxml_use_internal_errors(true); $sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>"); if ($sxe === false) { echo "Failed loading XML\n"; foreach(libxml_get_errors() as $error) { echo "\t", $error->message; } } ?>
3. 관련 함수
SimpleXMLElement::addAttribute — SimpleXML 요소에 속성을 추가합니다.
SimpleXMLElement::registerXPathNamespace — 다음 XPath 쿼리에 대한 접두사/ns 컨텍스트를 생성합니다.
SimpleXMLElement::saveXML — 别名 SimpleXMLElement::asXML
SimpleXMLElement::__toString — 문자열 콘텐츠 반환
SimpleXMLElement::xpath — XML 데이터에 대해 XPath 쿼리 실행
SimpleXMLIterator类
SimpleXMLIterator::current — 현재 요소를 반환합니다.
SimpleXMLIterator::getChildren — 반환 현재 요소의 하위 요소
SimpleXMLIterator::hasChildren — 현재 요소에 하위 요소가 있는지 확인합니다.
SimpleXMLIterator::key — 현재 키 반환
SimpleXMLIterator::next — 다음 요소로 이동
SimpleXMLIterator::rewind — 첫 번째 요소로 되감기
SimpleXMLIterator::valid — 현재 요소가 유효한지 확인하세요.
以上就是PHP扩話之XML操작품(一)——SimpleXML的内容更多상关内容请关注PHP中文网(www.php.cn)!