Php 按名称值和仅一项获取XML数据';s儿童
我有这个和这个函数,它们获取XML数据并将其放入数组中Php 按名称值和仅一项获取XML数据';s儿童,php,xml,xpath,multidimensional-array,Php,Xml,Xpath,Multidimensional Array,我有这个和这个函数,它们获取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 S
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时,都会获取name=“Author”的所有项目。我知道会发生这种情况,因为我选择了所有带有name=“authors”的项目,无论它们在哪里,但经过多次尝试后,我无法修复它
有人能帮我吗?谢谢 为什么不构建这样的阵列:
$results2[id] = Array("Author1", "Author2", "Author3");
使用此代码:
$xml = simplexml_load_string($x); // assume XML in $x
foreach ($xml->DocSum as $doc) {
$temp = Array();
$authors = $doc->xpath("//Item[@Name='Author']");
foreach ($authors as $a) $temp[] = (string)$a;
$results2[(string)$doc->Id] = $temp;
}
查看它是否正常工作:尝试删除xpath中的“/”。如果删除//或我放置/无效,则数组不会保存任何作者姓名。我想我终于明白您在寻找什么了;对xpath使用“Item/Item[@Name='Author']”。(对不起,我的php太生锈了,都要剥落了)那也不行。我不知道为什么,但只有当我把//放在我尝试过的所有其他方法中,数组才是空的,就好像路径不正确一样。如果我对php的猜测是正确的,那么将“$authors=$xml\u file->xpath(“//Item[@Name='Author']”)”改为“$authors=$items->xpath(“Item/Item[@Name='Author']””;这将所有作者放在同一个id中,我想把每个作者都放在他们的id内。而且,函数不完整,它会有更多的键。但是在一级数组中使用id是个好主意,谢谢@Genethic你是对的,我以为它只会以一个DocSum的价格返回作者。。。