>  기사  >  백엔드 개발  >  PHP 확장의 XML 연산 (1)-SimpleXML

PHP 확장의 XML 연산 (1)-SimpleXML

黄舟
黄舟원래의
2018-05-17 09:38:185194검색


1. 소개 및 설치

SimpleXML 확장은 일반 속성 선택기를 사용하여 XML을 XML 파일로 변환할 수 있는 매우 간단하고 사용하기 쉬운 도구 세트를 제공합니다. 배열 반복자를 위한 객체입니다.

이 확장에는 libxml PHP 확장이 필요합니다. 이는 --enable-libxml을 사용해야 함을 의미합니다. 단, libxml이 기본적으로 활성화되어 있으므로 이 작업은 암시적으로 수행됩니다.

PHP5 이상이 필요합니다.

이 확장은 기본적으로 활성화되어 있으며 컴파일 시 다음 옵션을 통해 비활성화할 수 있습니다: --disable-simplexml

2. 사용 예

기본 사용법

예제 #1 XML 문자열이 포함된 example.php 파일 포함

<?php
$xmlstr = <<<XML
<?xml version=&#39;1.0&#39; standalone=&#39;yes&#39;?>
<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&#39;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 a82a54010e8e844b28dec6f52c796df1

<?phpinclude &#39;example.php&#39;;
$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 8aaab0aade3556df865b9d5d83cc90b2

<?phpinclude &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie->{&#39;great-lines&#39;}->line;?>

위 루틴은 다음을 출력합니다:

PHP solves all my web problems

예 #4 SimpleXML의 고유하지 않은 요소에 액세스

요소의 여러 인스턴스가 단일 상위 요소의 하위 요소로 존재하는 경우 일반적인 반복 기술이 적용됩니다.

<?phpinclude &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
/* For each <character> node, we echo a separate <name>. */foreach ($movies->movie->characters->character as $character) {
echo $character->name, &#39; played by &#39;, $character->actor, PHP_EOL;}
?>

위 루틴은 다음을 출력합니다.

Ms. Coder played by Onlivia Actora
Mr. Coder played by El ActÓr

참고:

속성(이전 예의 $movies->movie)은 배열이 아니며 반복 가능하고 액세스 가능한 객체입니다.

예제 #5 특성 사용

지금까지는 요소 이름과 해당 값을 읽는 작업만 다루었습니다. SimpleXML은 배열 요소와 마찬가지로 요소 속성에 액세스할 수도 있습니다.

<?phpinclude &#39;example.php&#39;;
$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[&#39;type&#39;]) { // Get attributes as element indicescase &#39;thumbs&#39;:echo $rating, &#39; thumbs up&#39;;
break;case &#39;stars&#39;:echo $rating, &#39; stars&#39;;break;}}
?>

위 루틴은 다음을 출력합니다. :

7 thumbs up5 stars

예 #6 요소 및 속성을 텍스트와 비교

요소나 속성을 문자열과 비교하거나 문자열이 필요한 함수에 전달하려면 (string)을 사용하여 문자열로 변환해야 합니다. 그렇지 않으면 PHP는 요소를 객체로 처리합니다.

<?phpinclude &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
if ((string) $movies->movie->title == &#39;PHP: Behind the Parser&#39;) {print &#39;My favorite movie.&#39;;}
echo htmlentities((string) $movies->movie->title);?>

위 루틴은 다음을 출력합니다:

My favorite movie.PHP: Behind the Parser

예제 #7 두 요소 비교

두 개의 SimpleXMLElement는 PHP 5.2.0부터 동일한 요소를 가리키더라도 서로 다른 것으로 간주됩니다.

<?phpinclude &#39;example.php&#39;;
$movies1 = new SimpleXMLElement($xmlstr);$movies2 = new SimpleXMLElement($xmlstr);
var_dump($movies1 == $movies2); // false since PHP 5.2.0?>

위 루틴은 다음을 출력합니다.

bool(false)

예 #8 XPath 사용

SimpleXML에는 모든 >//'을 찾기 위한 기본 지원이 포함되어 있으며 절대 경로를 지정하려면 하나를 생략하세요.

위 루틴은 다음을 출력합니다.

<?phpinclude &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
foreach ($movies->xpath(&#39;//character&#39;) as $character) {
echo $character->name, &#39;played by &#39;, $character->actor, PHP_EOL;}?>
예 #9 값 설정

SimpleXML의 데이터는 일정할 필요가 없습니다. . 객체는 모든 요소를 ​​조작할 수 있습니다.

Ms. Coder played by Onlivia Actora
Mr. Coder played by El ActÓr
위 루틴은 다음을 출력합니다:
<?phpinclude &#39;example.php&#39;;$movies = new SimpleXMLElement($xmlstr);
$movies->movie[0]->characters->character[0]->name = &#39;Miss Coder&#39;;
echo $movies->asXML();?>

예 #10 요소 및 속성 추가

PHP 5.1.3부터 ​​SimpleXML에는 하위 항목과 속성을 쉽게 추가하는 기능이 있습니다.

3e5184b51d19bd3b3173071244ff71fe
eab6e99f51fee68293d1126fa516c747
 8adf8e6c41d19c74d254355bd9d9c69e
  b2386ffb911b14667cb8f0f91ea547a7PHP: Behind the Parser6e916e0f7d1e588d4f442bf645aedb2f
  c3ae6056e653b437c6b27357b7e7671a
   db0c08544b71179f3fd0e855bd613a1b
    8a11bc632ea32a57b3e3693c7987c420Miss Coderdf406f776eecbaf16b62325323196f14
    194eaccae6455d5c407b1ac2afe04cd0Onlivia Actorac0d1bcc4fa4e9e034ebc23e1ef89e5c2
   66707054a46c2dec1bf24d9318ba1124
   db0c08544b71179f3fd0e855bd613a1b
    8a11bc632ea32a57b3e3693c7987c420Mr. Coderdf406f776eecbaf16b62325323196f14
    194eaccae6455d5c407b1ac2afe04cd0El Act&#xD3;rc0d1bcc4fa4e9e034ebc23e1ef89e5c2
   66707054a46c2dec1bf24d9318ba1124
  aabc3226380a602ad187eb87d5efa83f
  a82a54010e8e844b28dec6f52c796df1
   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.
  fa8825681e04013deb51ef36ab6dbac6
  54a9d3919a9de3703b391ab1e4eaee87
   15a73cc5312745b1b00671f6e690e36aPHP solves all my web problems6e6d7ec7f2f63fbe473136c2c34a55b7
  c0dd7eda886ba0d09f5a00454545474c
  e27af9d8c16e5d4022ce762c86f195be79df14055a92f49c29299ca2d367bde62
  b724a65f9508b61211142b27c8620c4659df14055a92f49c29299ca2d367bde62
 96664a6d22a82ab9c28a528afca408bc
c3a75a871bc1ee80ecb54700c0759808
위 루틴은 다음을 출력합니다.
<?phpinclude &#39;example.php&#39;;$movies = new SimpleXMLElement($xmlstr);
$character = $movies->movie[0]->characters->addChild(&#39;character&#39;);$character->addChild(&#39;name&#39;, &#39;Mr. Parser&#39;);
$character->addChild(&#39;actor&#39;, &#39;John Doe&#39;);
$rating = $movies->movie[0]->addChild(&#39;rating&#39;, &#39;PG&#39;);$rating->addAttribute(&#39;type&#39;, &#39;mpaa&#39;);
echo $movies->asXML();?>

예제 #11 DOM 상호 운용성

PHP에는 SimpleXML과 DOM 형식 간에 XML 노드를 변환하는 메커니즘이 있습니다. 이 예에서는 DOM 요소를 SimpleXML로 변경하는 방법을 보여줍니다.

3e5184b51d19bd3b3173071244ff71fe
eab6e99f51fee68293d1126fa516c747
 8adf8e6c41d19c74d254355bd9d9c69e
  b2386ffb911b14667cb8f0f91ea547a7PHP: Behind the Parser6e916e0f7d1e588d4f442bf645aedb2f
  c3ae6056e653b437c6b27357b7e7671a
   db0c08544b71179f3fd0e855bd613a1b
    8a11bc632ea32a57b3e3693c7987c420Ms. Coderdf406f776eecbaf16b62325323196f14
    194eaccae6455d5c407b1ac2afe04cd0Onlivia Actorac0d1bcc4fa4e9e034ebc23e1ef89e5c2
   66707054a46c2dec1bf24d9318ba1124
   db0c08544b71179f3fd0e855bd613a1b
    8a11bc632ea32a57b3e3693c7987c420Mr. Coderdf406f776eecbaf16b62325323196f14
    194eaccae6455d5c407b1ac2afe04cd0El Act&#xD3;rc0d1bcc4fa4e9e034ebc23e1ef89e5c2
   66707054a46c2dec1bf24d9318ba1124
  db0c08544b71179f3fd0e855bd613a1b8a11bc632ea32a57b3e3693c7987c420Mr. Parserdf406f776eecbaf16b62325323196f14194eaccae6455d5c407b1ac2afe04cd0John Doec0d1bcc4fa4e9e034ebc23e1ef89e5c266707054a46c2dec1bf24d9318ba1124aabc3226380a602ad187eb87d5efa83f
  a82a54010e8e844b28dec6f52c796df1
   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.
  fa8825681e04013deb51ef36ab6dbac6
  54a9d3919a9de3703b391ab1e4eaee87
   15a73cc5312745b1b00671f6e690e36aPHP solves all my web problems6e6d7ec7f2f63fbe473136c2c34a55b7
  c0dd7eda886ba0d09f5a00454545474c
  e27af9d8c16e5d4022ce762c86f195be79df14055a92f49c29299ca2d367bde62
  b724a65f9508b61211142b27c8620c4659df14055a92f49c29299ca2d367bde62
 8f35ab349d6453d281f32443bf3504f4PG9df14055a92f49c29299ca2d367bde6296664a6d22a82ab9c28a528afca408bc
c3a75a871bc1ee80ecb54700c0759808
위 루틴은 다음을 출력합니다.
<?php$dom = new DOMDocument;$dom->loadXML(&#39;<books><book>
<title>blah</title></book></books>&#39;);if (!$dom) {echo &#39;Error while parsing the document&#39;;exit;}
$books = simplexml_import_dom($dom);
echo $books->book[0]->title;?>
XML 오류 처리

예제 1 깨진 XML 문자열 로드

blah

위 루틴은 다음을 출력합니다:

<?php
libxml_use_internal_errors(true);
$sxe = simplexml_load_string("<?xml version=&#39;1.0&#39;><broken><xml></broken>");
if ($sxe === false) {
echo "Failed loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>

3. 관련 함수


simplexml_import_dom — DOM 노드에서 SimpleXMLElement 객체를 가져옵니다.

  • simplexml_load_file — XML 파일을 객체

  • simplexml_load_string — XML 문자열을 객체로 해석합니다

  • 4. 관련 클래스 및 멤버 함수

  • SimpleXMLElement 클래스

SimpleXMLElement::addAttribute — SimpleXML 요소에 속성을 추가합니다.

  • SimpleXMLElement::addChild — XML 노드에 대한 하위 요소

  • SimpleXMLElement::asXML — SimpleXML 요소를 기반으로 올바른 형식의 XML 문자열 반환

  • SimpleXMLElement::attributes — 요소의 속성 식별

  • SimpleXMLElement::children — 지정된 노드의 하위 항목 찾기

  • SimpleXMLElement::__construct — 새 SimpleXMLElement 객체 생성

  • SimpleXMLElement::count — 요소의 하위 요소 수를 계산합니다

  • SimpleXMLElement::getDocNamespaces — 문서에 선언된 네임스페이스를 반환합니다

  • SimpleXMLElement::getName — XML 요소의 이름을 가져옵니다

  • SimpleXMLElement ::getNamespaces — 문서에 사용된 네임스페이스를 반환합니다

  • 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)!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.