1

我正在尝试显示来自 xml 文件的信息。它不会给我错误,但数组是空的。我正在使用wordrpess,我对php没有太多经验,所以,我不知道这是否是最好的方法。

这是我的代码:

<?php 
function pubmedQuery() { 
    $xml = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]';
    $xml_file =  simplexml_load_file( $xml );
    $results_count = $xml_file->Count;
    $results_ids = array(); 
    foreach ( $xml_file->IdList->Id as $items ) {
        $results_ids[] = $items;
    }
    return "Hay " . $results_count . " resultados: " . $results_ids;
}
//Show results
    echo'<h3>Resultados de búsqueda:</h3>' . pubmedQuery ();    
?>

这是结果:

Resultados de búsqueda: Hay 0 resultados: Array

谢谢!原谅我的英语!

4

2 回答 2

1

@Gavin 是对的。但是,您可以通过以下方式获取内容file_get_contents

function pubmedQuery() { 
    $xml = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]';
    $content =  file_get_contents($xml);
    $xml_file = simplexml_load_string($content);
    $results_count = $xml_file->Count;
    $results_ids = array(); 
    foreach ( $xml_file->IdList->Id as $items ) {
        $results_ids[] = $items;
    }
    return "Hay " . $results_count . " resultados: " . implode("\n",$results_ids);
}
//Show results
echo'<h3>Resultados de búsqueda:</h3>' . pubmedQuery ();   

输出

干草 6 结果:19008416 18927361 18787170 18487186 18239126 18239125

请注意implode("\n",$results_ids),无论是否找到 id,它都会返回带有找到的 id 的字符串,而不是返回文本数组。

于 2013-11-11T10:28:52.757 回答
0

根据我的评论,您从中抓取的网站似乎具有用户代理检测功能。

function pubmedQuery() { 
    $context = stream_context_create(array(
      'http'=>array(
        'user_agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'
       )
    ));

    $xml = file_get_contents('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]', FALSE, $context);

    $xml_file = simplexml_load_string($xml);
    $results_count = $xml_file->Count;
    $results_ids = array(); 
    foreach ( $xml_file->IdList->Id as $items ) {
        $results_ids[] = $items;
    }
    return "Hay " . $results_count . " resultados: " . $results_ids;
}
//Show results
echo'<h3>Resultados de búsqueda:</h3>' . pubmedQuery ();    

上面的代码将欺骗file_get_contents调用的用户代理,因此网站会认为它是一个普通的浏览器。

于 2013-11-11T10:24:01.457 回答