【问题标题】:Parsing XML returned from cURL and having issues parsing the curl_exec object into a SimpleXMLElement解析从 cURL 返回的 XML 并在将 curl_exec 对象解析为 SimpleXMLElement 时遇到问题
【发布时间】:2012-10-17 06:34:41
【问题描述】:

我似乎从这个 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];

我必须在这里做错了,但我不明白为什么解析这个返回值这么难。

【问题讨论】:

    标签: php rest curl xml-parsing simplexml


    【解决方案1】:

    您的 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-&gt;NumCredits; 访问该值

    【讨论】:

    • 哇,我真的应该明白这一点,感谢您减轻了我的挫败感!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多