按名称值获取XML数据,只获取一个项目的子项

时间:2013-11-12 20:10:57

标签: php xml xpath multidimensional-array

我有这个XML和这个函数来获取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。我知道这是因为我选择了所有名称为"作者"无论他们在哪里,但经过多次尝试,我无法解决它。

有人可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

为什么不建立这样的数组:

$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;
}   

看到它有效:http://codepad.viper-7.com/syGINn

相关问题