我正在从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。
答案 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;
}