2014-02-13 27 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

相关问题