首页 > 解决方案 > 循环xml的所有节点以获取贡献者

问题描述

这里有一个包含作者列表的XML

... 
<contributors>
    <person_name contributor_role="author" sequence="first">
        <given_name>John</given_name>
        <surname>Doe</surname>
    </person_name>
    <person_name contributor_role="author" sequence="first">
        <given_name>Micheal</given_name>
        <surname>Bob</surname>
    </person_name>
    <person_name contributor_role="author" sequence="additional">
        <given_name>Lyly</given_name>
        <surname>Jane</surname>
    </person_name>
    <person_name contributor_role="author" sequence="additional">
        <given_name>Tom</given_name>
        <surname>Mark</surname>
    </person_name>      
</contributors>
...

我尝试使用下面的代码来获取所有作者的全名(名字和姓氏)但无法正常工作 - 显示由“;”分隔的空白值 因为我在我的代码中使用了。

$xml2 = simplexml_load_file($api_xml_url);
foreach($xml2 as $contributors =>$node) {
    foreach($node as $person_name => $child) {
        $authors = $child->given_name ." " .$child->surname ."; ";
        echo $authors;
    }

如何像 John Doe 一样按顺序显示所有作者;迈克尔·鲍勃;莉莉·简;汤姆马克

标签: phpxmlloopsparsing

解决方案


基于您在此链接上提供的 XML:XML 文件

这是解决方案:

foreach($xml2->query_result->body->query->doi_record->crossref->journal->journal_article->contributors as $contributors) {
   foreach($contributors as $person) {
       $author = $person->given_name ." " .$person->surname ."; ";
       echo $author;
   }
}

测试并且工作正常。


推荐阅读