2014-02-13 1 views
-1

NLM (National Library of Medicine)에서 일부 약물 데이터를 가져옵니다. 나는 XML 문자열입니다 결과의 변환하려고 해요 :simplexml_load_string()에서 요소를 반환하지 않습니다.

<SpellAid> 
<Chemical> 
<Name>Albuterol</Name> 
<CAS>18559-94-9</CAS> 
</Chemical> 
<Chemical> 
<Name>Albuterol [USAN]</Name> 
<CAS>18559-94-9</CAS> 
</Chemical> 
<Chemical> 
<Name>dl-Albuterol</Name> 
<CAS>18559-94-9</CAS> 
</Chemical> 
</SpellAid> 

내가 할 경우 :

exit(var_dump(simplexml_load_string($response)->children())); 

내가 얻을 :

object(SimpleXMLElement)#75 (0) { } 

exit(var_dump(simplexml_load_string($response))); 

을하고 나를 얻는다

object(SimpleXMLElement)#56 (0) { } 

내가 뭘 잘못하고 있니? 아마도 나는 xfm, 즉 주사위를 utf8_encode 할 필요가 있다고 생각했습니다. Simplexml_load_string은 적절한 xml DTD를 추가 할만큼 충분히 좋습니다.

도움을 주시면 감사하겠습니다. 또한 참고로, 나는 아이들을 다음과 같이 참조하려고 시도했다 :

$response->children()->SpellAid; 
$response->children()->SpellAid[0]; 
$response->children()->Chemical; 

$ response-> 화학 물질이 배열로 반환되지 않는다. $ response-> SpellAid는 사실 simplexml 요소이지만 화학적 멤버는 NULL입니다.

답변

-1

우선, 가능한 한 많은 코드 줄을 하나의 줄에 넣는 데 보너스 포인트를 얻지 못합니다.

는 좀 더 읽기 쉽고 유지 보수가 무언가로이 분해 보자

$response = ...; // your XML input 

$xml = simplexml_load_string_response($response); 

$chemicals = $xml->Chemical; 

// $chemicals stores an array of XMLSimpleElement objects. 
// You can work with them like this: 

foreach($chemicals as $chemical) { 
    echo $chemical->Name; 
    echo $chemical->CAS; 
} 
+0

를 지금까지 내가 화학 배열로하지만 요소로 반환되지 않는> $ 응답 - 말할 수있다. 이를 반복하려고 시도하면 루프가 입력되지 않습니다. $ response-> SpellAid는 사실 simplexml 요소이므로 $ response-> SpellAid-> Chemical이 작동한다고 생각했지만 NULL을 제공합니다. – TheMonarch

+0

또한, 일종의 일이 예상대로 작동하지 않으면 코드 분류의 미학이 떨어졌습니다. – TheMonarch

+0

글쎄, 나는 다시 쓰지 않고 코드를 복사했다. 나는 진정으로 내가 뭘 잘못하고 있는지 모릅니다. 내가 도움을 주셔서 감사합니다. – TheMonarch

관련 문제