2010-02-14 93 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>'; 

} 
?>