2014-02-13 26 views
-1

我從NLM(國家醫學圖書館)提取一些藥物數據。我試圖把它轉換的結果是一個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) { } 

我在這裏做錯了什麼?我想我可能需要utf8_encode xml,沒有骰子。 Simplexml_load_string也很好,可以預先配置正確的xml DTD。

任何幫助將不勝感激。另外,爲了參考,我試圖引用來自以下的兒童:

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

$ response-> Chemical不作爲數組返回。 $ response-> SpellAid實際上是一個simplexml元素,但是 - > Chemical成員是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

相關問題