【问题标题】:Parsing complex multiple XML attributes in PHP5在 PHP5 中解析复杂的多个 XML 属性
【发布时间】:2011-01-16 15:16:29
【问题描述】:

大家好,第一次在这个网站上发帖,请原谅格式。

我是使用 php 解析 xml 的新手,而且这个 xml 提要让我很难过。我开始使用纯粹基于元素的格式,但这种复杂的属性并不多。我试图让网站更改为更简单的基于元素的格式,但他们使用属性坚持使用这种格式,我很难以列表/排名样式格式提取所有数据,特别是对于每个成员的排名和积分.

只有 2 个成员的 xml 文件示例,但实际上可能有 100 个和 1000 个,具体取决于团队 ID。

<sitemembers>
  <members>
    <member>
      <name>username</name>
      <team id="1200">team1 name</team>
      <rank>
        <today rank="34" points="613.30" results="70"/>
        <yesterday rank="33" points="614.20" results="70"/>
        <lastweek rank="60" points="541.70" results="68"/>
        <lastmonth rank="163" points="415.60" results="63"/>
      </rank>
      <awards>
        <global gold="0" silver="0" bronze="0" medal="1"/>
        <local gold="5" silver="2" bronze="0" medal="3"/>
      </awards>
    </member>
    <member>
      <name>username2</name>
      <team id="1200">team1 name</team>
      <rank>
        <today rank="46" points="577.80" results="178"/>
        <yesterday rank="45" points="580.00" results="178"/>
        <lastweek rank="40" points="586.60" results="178"/>
        <lastmonth rank="75" points="503.60" results="169"/>
      </rank>
      <awards>
        <global gold="0" silver="0" bronze="0" medal="0"/>
        <local gold="0" silver="2" bronze="2" medal="6"/>
      </awards>
    </member>
  </members>
</sitemembers>

以及想要的输出格式

    Members ranking for team1 name (teamid: 1200)

    1. username
    Current rank: 34 : 613.30 pts (submissions: 70)
    Yesterday rank: 33 : 614.20 ps (submissions: 70)
    Last week rank: 60 : 541.70 pts (submissions: 68)
    Last month rank: 163 : 415.60 (submissions: 63)
    Global awards: 1 medals - [Gold: 0 Silver: 0 Bronze: 0]
    Local awards: 3 medals - [Gold: 5 Silver: 2 Bronze: 0]

    2. username2
    Current rank: 46 : 577.80 pts (submissions: 178)
    Yesterday rank: 45 : 580.00 ps (submissions: 178)
    Last week rank: 40 : 588.60 pts (submissions: 178)
    Last month rank: 75 : 503.60 (submissions: 169)
    Global awards: 0 medals - [Gold: 0 Silver: 0 Bronze: 0]
    Local awards: 6 medals - [Gold: 0 Silver: 2 Bronze: 2]

感谢任何帮助引导我朝着正确的方向前进。谢谢

【问题讨论】:

  • 到目前为止你有什么?您使用的是 XML 相关的扩展之一 (us3.php.net/manual/en/refs.xml.php) 还是其他?
  • 哇,乔希,你成功了,完美运行。谢谢:)

标签: php xml xml-parsing


【解决方案1】:

使用SimpleXML

$sitemembers = simplexml_load_string($xml);

echo '<ol>';
foreach ($sitemembers->members->member as $member)
{
    $today = $member->rank->today;
    echo '<li>', $member->name, '<br />',
         'Current rank: ', $today['rank'], ' : ', $today['points'];
    // etc...
    echo '</li>';
}
echo '</ol>';

【讨论】:

    【解决方案2】:

    将您的 xml 代码放在 local.xml 中

    $sitemembers = simplexml_load_file("local.xml");
    
    foreach ($sitemembers->members->member as $member)
    {
    
    
    $today = $member->rank->today;
    $yesterday=$member->rank->yesterday;
    $lastweek=$member->rank->lastweek;
    $lastmonth=$member->rank->lastweek;
    $awards1=$member->awards->global;
    $awards2=$member->awards->local;
    
    echo '<li>', $member->name, '<br />',
         'Current rank: ', $today['rank'], ' : ', $today['points'], 'pts' , '(Submission :', $today['results'], ')';
    echo '<br />',
         'Yesterday rank: ', $yesterday['rank'], ' : ', $yesterday['points'], 'pts' , '(Submission :', $yesterday['results'], ')';
    echo '<br />',
         'Last week rank: ', $lastweek['rank'], ' : ', $lastweek['points'], 'pts' , '(Submission :', $lastweek['results'], ')';
    echo '<br />',
         'Last month rank: ', $lastmonth['rank'], ' : ', $lastmonth['points'], 'pts' , '(Submission :', $lastmonth['results'], ')';
    echo '<br />',
         'Global award: ', $awards1['medal'], ' - '.'[ Gold:'.$awards1['gold'].' '.'Silver:'.$awards1['silver'].' '.'Bronze:'.$awards1['bronze'].']';
     echo '<br />',    
         'Local award: ', $awards2['medal'], ' - '.'[ Gold:'.$awards2['gold'].' '.'Silver:'.$awards2['silver'].' '.'Bronze:'.$awards2['bronze'].']';
    echo '</li>';
    
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2020-01-23
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      相关资源
      最近更新 更多