2010-02-14 92 views
1

嗨,大家好,首先发布在这个网站,所以请原谅格式。在PHP5中解析复杂的多个XML属性

我是新来的XML解析与PHP和这个XML饲料让我难住。我使用纯粹的基于元素的格式,但并不是那么重要。我试图让网站改变为更简单的基于元素的格式,但他们坚持使用这种格式的属性,我很难抽出列表/排名风格格式的所有数据,特别是对于每个成员的排名和积分。

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

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] 

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

和输出希望任何帮助,在指导我的方向是正确的赞赏。由于

+1

你有什么这么远吗?您是否使用XML相关扩展(http://us3.php.net/manual/en/refs.xml.php)或其他内容? – outis 2010-02-14 05:01:56

+0

你的Josh钉了它,完美地工作。 谢谢:) – p4guru 2010-02-14 16:54:12

回答

2

使用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>'; 
+0

哇乔希你钉了它,完美的作品。谢谢 :) – p4guru 2010-02-14 19:27:37

0

将您在local.xml中的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>'; 

} 
?>