simplexml_load_string()不返回任何元素

时间:2014-02-13 01:33:22

标签: php xml simplexml

我正在从NLM(国家医学图书馆)中提取一些药物数据。我正在尝试转换它的结果,这是一个xml字符串:

<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-&gt;化学品未作为数组返回。 $ response-&gt; SpellAid实际上是一个simplexml元素,但是然后 - &gt;化学成员是NULL。

1 个答案:

答案 0 :(得分:-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;
}