我有这个函数从XML获取值并创建一个多维度数组。
function esummary_query($db, $id) {
$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/esummary.fcgi?db=' . $db . '&id=' . $id, FALSE, $context);
$xml_file = simplexml_load_string($xml);
$results2 = array();
$c=0;
foreach ( $xml_file->DocSum as $items ) {
$results2[$c]['id'] = $items->Id;
$authors = $xml_file->xpath("//Item[@Name='Author']");
foreach ($authors as $author) {
$results2[$c]['authors'][] = $author;
}
$c++;
}
return $results2;
}
但每次阅读DocSum时,都会获得名称=“作者”的所有项目。我知道这是因为我选择名称=“authors”的所有项目,无论它们在哪里,但是如果我把$ xml_file-> xpath(“/ Item [@ Name ='Author']”)或$ items-> xpath(“/ Item [@ Name ='Author']”)它不起作用。
这是XML。
我该怎么做?
谢谢!
答案 0 :(得分:0)
//DocSum/Id[text()="24214944"]/..//Item[@Name="Author"]
返回DocSum的作者列表,其中24214944为id。从中扩展可以动态构建xpath查询:
$results2[$c]['id'] = $items->Id;
$authors = $xml_file->xpath('//DocSum/Id[text()="' . $items->Id . '"]/..//Item[@Name="Author"]');
foreach ($authors as $author) {
$results2[$c]['authors'][] = $author;
}