解析从cURL返回的XML并且将curl_exec对象解析为SimpleXMLElement时出现问题

时间:2012-10-27 01:10:17

标签: php rest curl xml-parsing simplexml

我似乎从这个cURL中获取了格式良好的XML文档,但我似乎无法使用SimpleXMLElement类解析此返回。这是我现在正在使用的代码迭代:

$url = "http://rosemary.umw.edu/~stephen/cpsc448/numCredits.php?prefix=". $prefix ."&number=" . $number; // prefix=cpsc&number=220
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 15);

$resp = curl_exec($ch);

echo $resp;

返回:

<?xml version="1.0"?><NumCredits>4</NumCredits>

这就是我目前正在尝试解析回报的方式:

$xml = new SimpleXMLElement($resp);
echo $xml->NumCredits[0];

使用这个我没有得到回复。我也试过这种方法但没有成功:

$dom = new DOMDocument;
$dom->loadXML($resp);
if (!$dom) {
    echo 'Error parsing document';
    exit;   
}

$simpleXML = simplexml_import_dom($dom);
echo $simpleXML;
return $simpleXML->NumCredits[0];

我必须在这里做错事但我无法弄清楚为什么要解析这个回报是如此困难。

1 个答案:

答案 0 :(得分:3)

您的XML中只有一个元素,因此它被视为文档根目录:

$xml_string = '<?xml version="1.0"?><NumCredits>4</NumCredits>';
$xml = new SimpleXmlElement($xml_string);
print_r($xml);

将输出:

SimpleXMLElement Object
(
    [0] => 4
)

因此可以$xml[0];

进行访问

如果您希望能够通过元素名称访问它,则需要在XML中添加根元素,例如:

<?xml version="1.0"?>
<root>
    <NumCredits>4</NumCredits>
</root>

解析完此文档后,您可以使用$xml->NumCredits;

访问该值