-1
我使用xml api。我使用simplexml_load_string方法解析了xml文件,但我也想循环作者数据。我遇到了一个问题,使用foreach循环来检索数据。我该如何解决这个问题。这是输出。 PHP Foreach循环麻烦分析xml数据?
[0] => SimpleXMLElement Object
(
[title] => Impact of Electron-Electron Cusp on Configuration Interaction Energies
[author] => Array
(
[0] => SimpleXMLElement Object
(
[name] => David Prendergast
)
[1] => SimpleXMLElement Object
(
[name] => M. Nolan
)
[2] => SimpleXMLElement Object
(
[name] => Claudia Filippi
)
[3] => SimpleXMLElement Object
(
[name] => Stephen Fahy
)
[4] => SimpleXMLElement Object
(
[name] => J. C. Greer
)
)
)
[1] => SimpleXMLElement Object
(
[title] => Electron thermal conductivity owing to collisions between degenerate electrons
[author] => Array
(
[0] => SimpleXMLElement Object
(
[name] => P. S. Shternin
)
[1] => SimpleXMLElement Object
(
[name] => D. G. Yakovlev
)
)
)
apicall.php
class arxivApi{
public $search_query = '';
public $start = 0;
public $max_results = 2;
public $url = "http://export.arxiv.org/api/query?";
public function query($term){
$search_query = "all:".urlencode($term);
$q = array();
$param = array(
'search_query' => $search_query,
'start' => $this->start,
'max_results' => $this->max_results
);
foreach ($param as $key => $value) { $q[] = $key . '=' . $value; }
$httpquery = implode('&',$q);
$url = $this->url.$httpquery;
$xml = $this->load_file_from_url($url);
$result = $this->parse($xml);
}
public function load_file_from_url($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$str = curl_exec($ch);
$str = simplexml_load_string($str);
curl_close($ch);
return $str;
}
public function parse($xml){
$data = array();
foreach ($xml->entry as $val) {
$url = $val->id;
$id = strrchr($url,"/");
$id = substr($id,1,strlen($id));
$data[] = array(
'title' => (string)$val->title,
'id' => (string)$id,
'summary' => (string)$val->summary
);
$authors = array();
foreach($val->author as $sname){
$authors[] = (string)$sname->name;
}
}
$data[] = array(
'title' => (string)$val->title,
'id' => (string)$val->id,
'summary' => (string)$val->summary,
'authros' => implode(',',$authors)
);
return $data;
}
}
$result = new arxivApi();
$result->query('electron');
你从来没有说是什么问题。 – Carcigenicate
如何使用foreachloop从此xml文件中检索作者的详细信息。 – muraliniceguy97
你甚至不需要循环,除非它可以改变位置。作者似乎被存储在第2个数组中,位于“authors”键下。 – Carcigenicate