假设我有一个类似下面的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}}
答案 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>");
}
}
}
?>