El análisis complejo de múltiples atributos XML en PHP5
-
20-09-2019 - |
Pregunta
Hola chicos primer post en este sitio, así que la excusa de formato.
Soy nuevo en el análisis de xml con php y bueno, esto xml feed me tiene perplejo.Llego el uso puramente basado en elementos formatos, pero los atributos de este complejo, no tanto.Traté de conseguir el sitio a cambio de más fácil elemento basado en el formato, pero se la está pegando con este formato mediante el uso de atributos y estoy teniendo un tiempo difícil reunir todos los datos en un listado de ranking estilo de formato en particular para cada uno de los miembros de las clasificaciones y puntos.
ejemplo de archivo xml con sólo 2 miembros, pero en realidad no podía 100 y 1000, dependiendo del equipo de 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>
y la salida deseada en formato
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]
Cualquier ayuda es muy apreciada en dirección a mí en la dirección correcta.Gracias
Solución
Uso 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>';
Otros consejos
Coloque su código xml en 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>';
}
?>