【问题标题】:Looping all node of xml to get contributors循环xml的所有节点以获取贡献者
【发布时间】:2019-03-03 11:12:39
【问题描述】:

我有一个包含作者列表的 XML here

... 
<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 一样按顺序显示所有作者;迈克尔·鲍勃;莉莉·简;汤姆马克

【问题讨论】:

  • “不同的序列”是什么意思?你给出的顺序正是XML中的顺序?
  • 每个 XML 文件都有不同的顺序。我的意思是如何获得具有任何序列值的完整作者。谢谢
  • "but not working (just only show ;)" 是什么意思?你的问题是超级不清楚。请向我们展示预期结果和您当前获得的结果。我也不知道你在这种情况下所说的“序列”是什么意思。
  • 对不起,我的英语不好。我的代码只显示分号分隔每个作者,但没有显示给定的名字和姓氏。
  • @MagnusEriksson 他的意思是获取所有作者——不依赖于序列。尝试了他的代码,由于代码结构错误,它显示了空白值。我已经更正了它并现在作为答案发布。

标签: php xml loops parsing


【解决方案1】:

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

解决办法如下:

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

经过测试,工作正常。

【讨论】:

猜你喜欢
  • 2015-11-16
  • 2015-08-14
  • 2011-09-13
  • 2012-11-06
  • 2021-12-10
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多