Php 按名称值和仅一项获取XML数据';s儿童

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

我有这个和这个函数,它们获取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时,都会获取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的价格返回作者。。。