2010-01-02 7 views
1

SimpleXMLElement는 다른 SimpleXMLElements의 배열과 다른 태그에 중첩 된 태그가없는 경우 일부 일반 배열 값을 나타냅니다.SimpleXMLElement 객체에서 항목 가져 오기

나는 변수 $data에 SimpleXMLElement 있고, var_dump($data)이 나에게 제공합니다

object(SimpleXMLElement)#1 (33) { 
    ["buyer-accepts-marketing"]=> 
    string(4) "true" 
... 
... 

하지만 var_dump($data->buyer-accepts-marketing) 호출이 나에게 오류를 제공하고, var_dump($data["buyer-accepts-marketing"]) 나에게 NULL을 제공합니다. var_dump($data->shipping-address->children())을 호출하면 오류가 발생합니다.

foreach($data as $item) { 
    var_dump($item); 
} 

이 SimpleXMLElement 오브젝트의 전체 무리를 제공하지만, 이상하게도, 아니 문자열이나의 int :

같은 것.

무엇이 여기에 있습니까? 나는 그것의 특정 부분을 가지고 함수에 전달할 때문에, 예를 들어, 내가

$data->billing-address->postal-code; 

... 

$data->shipping-address->postal-code; 

... 

을 갈 필요가 없습니다 싶어 그냥

address($data->billing-address); 
address($data->shipping-address); 

답변

6

갈 수 SimpleXMLElement는 이 아니며이 아닙니다. 자식 요소에 액세스하려면 객체 표기법 ($a->b)을 사용하고 속성에 액세스하려면 배열 표기법 ($a['b'])을 사용해야합니다.

객체 표기법을 사용하면 유효한 태그 이름이 잘못된 PHP 코드 일 수 있습니다.

이 작업을 수행해야합니다 이것은 SimpleXMLElement를 반환

$data->{'buyer-accepts-marketing'}; 

참고! 그 이유는 텍스트, 더 많은 하위 요소 또는 둘 다를 포함 할 수 있기 때문입니다. var_dump()의 결과는 SimpleXMLElements의 오해의 소지가 있습니다. 단일 <buyer-accepts-marketing> 태그의 텍스트 내용을 원한다면, 당신은이 작업을 수행해야한다 :

물론
(string)$data->{'buyer-accepts-marketing'}; 

은 이렇게도 완벽하게 합법적이다 :

(int)$data->{'buyer-accepts-marketing'}; 

이 작업을 표시하는 이유 경우에 따라 SimpleXMLElement를 사용하는 것과 같이 형식 변환이 암시 적이고 자동적 인 경우가 있습니다. 객체가 echo 일 수 없으므로 PHP는 자동으로 객체를 문자열로 변환합니다.

저는 SimpleXML과 사랑/증오 관계가 있습니다. 매우 복잡한 것을 만드는 것 실제 API를 이해하신 후에 만 ​​을 부탁드립니다.

소위 "basic"예제를 읽고 좋은 결과를 얻으십시오.

+0

예! 승리! 정말 고맙습니다! –

관련 문제