Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php simplexml_load_string()不返回任何元素_Php_Xml_Simplexml - Fatal编程技术网

Php simplexml_load_string()不返回任何元素

Php simplexml_load_string()不返回任何元素,php,xml,simplexml,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<

我正在从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>
我得到:

object(SimpleXMLElement)#75 (0) { }

抓住我

object(SimpleXMLElement)#56 (0) { }
我做错了什么?我想我可能需要对xml进行utf8_编码,不要冒险。Simplexml_load_字符串也足够好,可以预先添加正确的xml DTD

任何帮助都将不胜感激。此外,为了便于参考,我尝试引用以下儿童:

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

$response->Chemical未作为数组返回$response->SpellAid实际上是一个simplexml元素,但是->化学成员是空的。

首先,将尽可能多的代码行塞进一行不会得到额外的分数

让我们将其分解为更具可读性和可维护性的内容:

$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;
}

据我所知,$response->Chemical不是作为数组返回的,而是作为元素返回的。尝试在循环中进行迭代无效,因此不会进入循环$response->SpellAid实际上是一个simplexml元素,所以我认为$response->SpellAid->Chemical可以工作,但它给了我空值。而且,一旦事情没有按我预期的方式工作,代码的美学就会下降。我复制了你的代码,而不是重新编写,它工作了。我真的不知道我做错了什么。我想谢谢你的帮助。
$response->children()->SpellAid;
$response->children()->SpellAid[0];
$response->children()->Chemical;
$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;
}