如何使用simplexml访问节点

时间:2014-05-23 11:25:54

标签: php xml simplexml

我正在访问维基百科api:http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exsentences=2&exlimit=10&exintro=&explaintext=&redirects=&generator=search&gsrsearch=France&gsrlimit=10

这给了我xml,我无法访问。我尝试过以下内容,但我得不到任何回报:

    ini_set("user_agent", 'myemail');   
$xml=simplexml_load_file('http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exsentences=2&exlimit=10&exintro=&explaintext=&redirects=&generator=search&gsrsearch=France&gsrlimit=10');        
header('Content-Type: text/xml'); 
echo $xml->api->query->pages->page[0]->extract;

谁能告诉我我做错了什么?请考虑到我在这里是一个XML新手...

2 个答案:

答案 0 :(得分:2)

$xml=simplexml_load_file('http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exsentences=2&exlimit=10&exintro=&explaintext=&redirects=&generator=search&gsrsearch=France&gsrlimit=10');
echo $xml->query->pages->page[0]->extract;

输出: - 在第二次世界大战中,法国之战,也被称为法国的沦陷,是1940年5月10日德国成功入侵法国和低地国家,主要击败法国军队。战斗包括两个主要行动。

答案 1 :(得分:0)

我会改用json api:在url字符串中将format=xml更改为format=json,然后执行:

$json = file_get_contents('http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exsentences=2&exlimit=10&exintro=&explaintext=&redirects=&generator=search&gsrsearch=France&gsrlimit=10');

$data = json_decode($json, true);

foreach ($data['query']['pages'] as $page) {
    echo '<p>' . $page['extract'] . '</p>';
}

使用json_decode你得到一个简单的php数组,我发现它比simplexml更直观,但那只是偏好。