2017-03-24 3 views
0

필자는 PHP 코드를 최소한으로 단순화했지만 여전히 단순한 XML 노드 값을 가져올 수 없습니다. 나는 작은 세부 사항을 놓치지 않았 음을 확인하기 위해 문서를 다시 읽었으며 단지 작동시키지 못한다.PHP SimpleXML - 단일 노드 값을 가져올 수 없습니다. 미친 것입니까?

var_dump($xmlStrShipping); // So far, so good 
/* Returns: 
SimpleXMLElement Object 
(
[Orders] => SimpleXMLElement Object 
    (
     [Order] => SimpleXMLElement Object 
      (
       [number] => Order number 
       [details] => SimpleXMLElement Object 
        (
        ) 

      ) 

    ) 

) 
*/ 
:

는 우선 난 그냥 객체 SimpleXMLElement 점점 계속, 나는 세부 사항을 노드의 값을 얻을 수

$xmlStrShipping = simplexml_load_string('<?xml version="1.0" encoding="utf-8" ?> 
    <Shipping> 
     <Orders> 
      <Order> 
       <number>Order number</number> 
       <details></details> 
      </Order> 
     </Orders> 
    </Shipping>'); 

그런 다음이 아주 기본적인 XML을로드

.

var_dump($xmlStrShipping->Orders[0]->Order->number); // Why is this happening? 
/* Returns 
SimpleXMLElement Object 
(
    [0] => Order number 
) 
*/ 

.

var_dump($xmlStrShipping->Orders[0]->Order->number[0]); // What?? 
/* Returns 
SimpleXMLElement Object 
(
) 
*/ 

이유는 를 검색 할 수 없습니다?
의 세부 정보는입니다. 빈 문자열 대신 SimpleXMLElement 객체입니까?

+0

이 방법은 반환 : 당신이 문자열 컨텍스트에서 호출하는 경우 SimpleXMLElement이 구현 된 마법 __toString() 방법을 가지고 있기 때문에

(string) $xmlStrShipping->Orders[0]->Order->number; 

또는 그것뿐만 아니라 작동합니다 : 그냥 문자열 (또는 무엇이든)에 캐스팅 SimpleXMLElement 객체 cast $ test = (string) $ xmlStrShipping-> Orders [0] -> Order-> number를 사용하십시오. 문자열 값을 얻으려면 –

+0

설명서를 보면 그들은 정확히 내가 사용하는 것처럼 SimpleXMLElement를 반환하지 않고 코드를 이상하게 보이게 만드는 타입 캐스팅을 사용할 필요가 없습니다. http : // php.net/simplexml_load_string – NaturalBornCamper

답변

2

SimpleXML은 모든 것을 SimpleXMLElement 객체로 변환합니다.

echo $xmlStrShipping->Orders[0]->Order->number; 
+0

아, 알겠습니다. 빈 문자열 일 때 빈 문자열로 다른 변수에 저장하는 방법이 없습니다. 못생긴 형식을 추가하지 않는 한 허? : ( – NaturalBornCamper

+0

방금 ​​당신의 대답을보고 나서 캐스팅에 대한 의견을 확인했는데 당신 말이 맞아요. 한 남자가이 문제에 대해 경고 했어요. – NaturalBornCamper