2017-09-14 1 views
3

I가 다음과 같은 XML : 나는 그것을 구문 분석하고 (즉 것 "변수 $ ergTitle에"제목 "의 값을 저장할PHP SimpleXML을 : 여러 항목의 특정 속성 값을 구문 분석

<doc> 
    <str name="segment">20170913064727</str> 
    <str name="digest">427522d5ceb605f87755c909deac698a</str> 
    <str name="title">AMS Site</str> 
<doc> 

AMS 사이트 ").

나는 한 다음 PHP 코드 :

foreach($data->result->doc as $dat) { 
    foreach ($dat->str as $att) { 
     foreach ($att->attributes() as $a => $b) { 
      echo $a,'="',$b,"\"\n" . '<br>'; 
      if ($b=='title') { 
       echo "OK"; 
      } 
     } 
    } 
} 

에 결과 :

name="segment" 
name="digest" 
name="id" 
name="title" 
OKname="url" 
name="content" 

하지만 어떻게 내가 지금 이름 = "제목"의 가치를 내 변수에 저장할 수 있습니다?

목표 : 나는 그래서 "컨텐츠", "URL", "제목"의 내용을 인쇄 할 (. 그것은 검색 쿼리의 결과 사이트)

답변

1

당신은 이상 반복하고 요소의 속성은입니다. 루프에서 요소 값은 $dat 변수에 있습니다. 이 예제에서, 나는 때문에 샘플 XML의 한 foreach() 루프를 제거했다 :

<?php 
$data = simplexml_load_file("a.xml"); 
foreach($data->str as $dat) { 
    foreach ($dat->attributes() as $a => $b) { 
     echo $a,'="',$b,'"'; 
     if ($b=='title') { 
      echo "right one"; 
     } 
    } 
    echo " -> ".$dat."<br>"; 
} 

/* result */ 
name="segment" -> 20170913064727 
name="digest" -> 427522d5ceb605f87755c909deac698a 
name="title" right one -> AMS Site 

당신은 당신이 그것을 발견 할 때 변수에 제목을 넣어하려는 경우, 루프 안에 동일한 변수 사용

<?php 
$data = simplexml_load_file("a.xml"); 
foreach($data->str as $dat) { 
    foreach ($dat->attributes() as $a => $b) { 
     if ($b=='title') { 
      $title = $dat; 
      break; 
     } 
    } 
} 
echo "Title: ".$dat; // Title: AMS Site 
1

XML의 구조에 따라 <str> 요소를 반복하고 특성을 콘텐츠에 매핑하는 배열을 만드는 것이 더 쉽습니다.

$dat = simplexml_load_string($xml); 

$attributes = []; 

foreach ($dat->str as $str) { 
    $attributes[(string) $str['name']] = (string) $str; 
} 

그런 다음 (등 또는 $ergTitle 변수에 할당) $attributes['title'] 아래에있는 "제목"요소에 액세스 할 수 있습니다.

관련 문제