使用curl_setopt无法获取子项的xml子项

时间:2016-10-19 19:13:08

标签: php xml loops oop foreach

假设我有一个类似下面的xml文件:

curl_setopt()

如何使用 <?php Class xmlObject{ public function xml_From_URL() { require_once 'dbconnect.php'; $config[CURLOPT_URL] = "http://localhost/example.xml"; $config[CURLOPT_VERBOSE] = 0; $config[CURLOPT_SSLVERSION] = 3; $config[CURLOPT_SSL_VERIFYPEER] = FALSE; $config[CURLOPT_SSL_VERIFYHOST] = 2; $config[CURLOPT_FOLLOWLOCATION] = 0; $config[CURLOPT_HEADER] = 0; $config[CURLOPT_RETURNTRANSFER] = 1; //-- config section --// $tuCurl = curl_init(); curl_setopt_array($tuCurl, $config); $data = curl_exec($tuCurl); $xml = simplexml_load_string($data); //-- Loops --// //-- 1 --// foreach($xml -> object as $row){ $id = $row -> id; $name = $row -> name; $value = $row -> value; echo("<b>Objects</b></br>"); echo($id."<br>"); echo($name."<br>"); echo($value."<br>"); } //-- 2 --// foreach ($xml -> description as $row) { $header = $row -> header; $text = $row -> text; echo("<b>description</b><br>"); echo($header); echo($text); } //-- 3 --// foreach ($xml -> shopdetails as $row) { $header = $row -> price; $text = $row -> currency; $weight = $row -> weight; $gramsymbol = $row -> gramsymbol; echo("<b>description</b><br>"); echo($header); echo($text); } curl_close($tuCurl); } } ?> 从此XML文件中获取所有信息?我用foreach循环尝试了它,但它失败了。它只从以下信息中获取信息: objectcode,object id和objecttype 。 我的脚本只能从根节点的子节点获取信息,但不能从子节点的子节点获取信息。我将这个脚本用于我的项目:

{{1}}

1 个答案:

答案 0 :(得分:0)

您只需更新解析XML数据的PHP代码 - cURL仅提供XML数据,不解析它。您正在使用simplexml_load_string()创建SimpleXMLElement。您只需要以不同的方式访问属性。

而不是像id这样访问$row

$id = $row->id;

我们需要访问<object><id>之间的节点 - 即<info>

$id = $row->info->id;

同样对于其他属性。此外,您可以在调用curl_close($tuCurl);之后立即移动curl_exec,因为cURL未解析XML数据 - simplexml是。您可以在此phpFiddle example中查看此操作(不使用cURL获取数据)。有关更多信息,请参阅PHP documentation for SimpleXML elements on PHP.net

<?php
Class xmlObject{    
    public function xml_From_URL() {
        require_once 'dbconnect.php'; 
        $config[CURLOPT_URL] = "http://localhost/example.xml";
        $config[CURLOPT_VERBOSE] = 0;
        $config[CURLOPT_SSLVERSION] = 3;
        $config[CURLOPT_SSL_VERIFYPEER] = FALSE;
        $config[CURLOPT_SSL_VERIFYHOST] = 2;
        $config[CURLOPT_FOLLOWLOCATION] = 0;
        $config[CURLOPT_HEADER] = 0;
        $config[CURLOPT_RETURNTRANSFER] = 1;
        //-- config section --//
        $tuCurl = curl_init();
        curl_setopt_array($tuCurl, $config);
        $data = curl_exec($tuCurl);

        //now that we have set $data, we can close the cURL request
        curl_close($tuCurl);

        $xml = simplexml_load_string($data);

        foreach($xml -> object as $row){ 
            //access these properties from the info childnode  
            $id = $row->info->id;
            $name = $row->info->name;
            $value = $row->info->value;   
            echo("<b>Objects</b></br>");
            echo($id."<br>");
            echo($name."<br>");
            echo($value."<br>");
            //access these properties using the properties childnode
            $header = $row->properties->shopdetails->desciption->header;
            $text = $row->properties->shopdetails->desciption->text;
            echo("<b>description</b><br>");
            echo($header."<br>");
            echo($text."<br>");
        }
    }
}
?>