Foros del Web » Programando para Internet » PHP »

Como tomar estos nodos de este xml con PHP?

Estas en el tema de Como tomar estos nodos de este xml con PHP? en el foro de PHP en Foros del Web. Hola gente, Tengo este xml Cita: <scores> <game time="Nov 19 2013 12:30:00:000AM"> <sport id="5" name=""/> <league id="9" name=""/> <away number="26217" name="Costa Rica" abbr="CR" score="0" points="0.3" ...
  #1 (permalink)  
Antiguo 19/11/2013, 19:02
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 8 meses
Puntos: 3
Pregunta Como tomar estos nodos de este xml con PHP?

Hola gente,

Tengo este xml
Cita:
<scores>
<game time="Nov 19 2013 12:30:00:000AM">
<sport id="5" name=""/>
<league id="9" name=""/>
<away number="26217" name="Costa Rica" abbr="CR" score="0" points="0.3" price="-115" ML="222" opener_points="0.5" opener_price="-111" opener_ML="330"/>
<home number="26218" name="Australia" abbr=" " score="1" points="-0.3" price="105" ML="140" opener_points="-0.5" opener_price="102" opener_ML="-101"/>
<status time_remaining=" " value="Final"/>
<total points="2.3" over="101" under="-112" opener_total="2.3" opener_over="111" opener_under="-125"/>
<period number="1" away_score="0" home_score="0"/>
<period number="2" away_score="0" home_score="1"/>
</game>
<game time="Nov 19 2013 06:00:00:000AM">
<sport id="5" name=""/>
<league id="9" name=""/>
<away number="26221" name="South Korea" abbr=" " score="1" points="" price="" ML="" opener_points="" opener_price="" opener_ML=""/>
<home number="26222" name="Russia" abbr=" " score="2" points="" price="" ML="" opener_points="" opener_price="" opener_ML=""/>
<status time_remaining=" " value="Final"/>
<total points="" over="" under="" opener_total="" opener_over="" opener_under=""/>
<period number="1" away_score="1" home_score="1"/>
<period number="2" away_score="0" home_score="1"/>
</game>
</scores>
Tengo este codigo que me funciona bien
Código PHP:
 // Loads XML.
 
$doc = new DOMDocument('1.0''utf-8');
 
$doc->preserveWhiteSpace false;
 
$doc->loadXML(file_get_contents('http://www.proveedor.com/scores.php')); 
 
 
// Reading all elements with tag name="game".
 
$cds $doc->getElementsByTagName"game" ); 
 
$data = array();
 
 foreach (
$cds as $cd
 {        
    
$onlyHour TranslateDateOnlyHour($cd->getAttribute('time'));
    if (
array_key_exists('period'$cd)) {
      
$period1A $cd->getElementsByTagName("period")->item(0)->getAttribute('away_score');
      
$period1H $cd->getElementsByTagName("period")->item(0)->getAttribute('home_score');
    }else{
      
$period1A '';
      
$period1H '';
    }
    
    
$data[] = array('time'     => TranslateDate($cd->getAttribute('time')),
                    
'sport'    => TranslateSport($cd->getElementsByTagName("sport")->item(0)->getAttribute('id')),
                       
'league'   => TranslateLeague($cd->getElementsByTagName("league")->item(0)->getAttribute('id')),
                    
'away'     => $cd->getElementsByTagName("away")->item(0)->getAttribute('abbr'),
                    
'home'     => $cd->getElementsByTagName("home")->item(0)->getAttribute('abbr'),
                    
'awayName' => $cd->getElementsByTagName("away")->item(0)->getAttribute('name'),
                    
'homeName' => $cd->getElementsByTagName("home")->item(0)->getAttribute('name'),
                    
'aNumber'  => $cd->getElementsByTagName("away")->item(0)->getAttribute('number'),
                    
'hNumber'  => $cd->getElementsByTagName("home")->item(0)->getAttribute('number'),
                    
'aScores'  => $cd->getElementsByTagName("away")->item(0)->getAttribute('score'),
                    
'hScores'  => $cd->getElementsByTagName("home")->item(0)->getAttribute('score'),
                    
'status'   => $cd->getElementsByTagName("status")->item(0)->getAttribute('value'),
                    
'timeG'    => $cd->getElementsByTagName("status")->item(0)->getAttribute('time_remaining'),
                    
'1stA'     => $period1A,
                    
'1stH'     => $period1H,
                    
'hour'     => $onlyHour);

 } 
el problema que tengo es que en algunos casos el nodo period aparece solo una vez, en otras 2 veces y en otras no aparece. El periodo tiene un number si el marcador de casa y visita, por ello necesito saber el marcador de casa y visita del periodo con el number 1 y asi sucesivamente, gracias.
  #2 (permalink)  
Antiguo 19/11/2013, 19:38
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como tomar estos nodos de este xml con PHP?

¿Estás seguro de lo que estás haciendo?

Código PHP:
Ver original
  1. if (array_key_exists('period', $cd)) {
Esta línea no tiene sentido. No va a encontrar el índice period nunca.

Usa la propiedad length de la clase DOMNodeList para saber cuántos nodos period hay en cada vuelta del foreach.

Código PHP:
Ver original
  1. $period = $cd->getElementsByTagName('period');
  2. echo $period->length; //número de nodos period

Adapta eso en el condicional que ya tienes.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 19/11/2013, 19:43
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 8 meses
Puntos: 3
De acuerdo Respuesta: Como tomar estos nodos de este xml con PHP?

gracias amigo, probare !
  #4 (permalink)  
Antiguo 19/11/2013, 19:48
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 8 meses
Puntos: 3
De acuerdo Respuesta: Como tomar estos nodos de este xml con PHP?

Amigo me funciono bien, pero ahora mi duda es, como hago para saber que en el periodo numero 1 el equipo casa tuve 0 y el visita 0, en el periodo 2 el equipo casa tuvo 1 y el de visita tuvo 0, asi dependiendo la cantidad de periodos que existan.

gracias
  #5 (permalink)  
Antiguo 19/11/2013, 20:00
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como tomar estos nodos de este xml con PHP?

Tienes que hacer un condicional con la información que te di, para ver si tiene 1, 2 o ningún nodo period y ya después de eso, si es necesario otros condicionales para casa y visita (ya sabes como leer atributos).

Periodo 1 = item(0)
Periodo 2 = item(1)

PD: No dupliques temas, evita ser sancionado.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 19/11/2013, 20:06
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 8 meses
Puntos: 3
Pregunta Respuesta: Como tomar estos nodos de este xml con PHP?

Gracias amigo, es que no supe como preguntar cuando cree el tema, fue un error tratare de no hacerlo mas.

Una consulta, la parte item(0), item(1) que significa item ?
es que aun me cuesta un poco esto :(
  #7 (permalink)  
Antiguo 19/11/2013, 20:17
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como tomar estos nodos de este xml con PHP?

item(0) sería el nodo periodo 1, item(1) sería el nodo periodo 2. Por ejemplo:

Código PHP:
Ver original
  1. //Periodo 1
  2. $period1A1 = $period->item(0)->getAttribute('away_score');
  3. $period1H1 = $period->item(0)->getAttribute('home_score');
  4.  
  5. //Periodo 2
  6. $period1A2 = $period->item(1)->getAttribute('away_score');
  7. $period1H2 = $period->item(1)->getAttribute('home_score');

Ahora con $period->length haces tu condicional y todos los condicionales que necesites.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 20/11/2013, 09:02
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 8 meses
Puntos: 3
De acuerdo Respuesta: Como tomar estos nodos de este xml con PHP?

Gracias amigo probare y cualquier duda te consulto gracias
  #9 (permalink)  
Antiguo 20/11/2013, 19:06
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: Como tomar estos nodos de este xml con PHP?

Hola aca estoy de nuevo, mira tengo este codigo pero no me funciona
Código PHP:
$period $cd->getElementsByTagName('period');
    
$cant $period->length//número de nodos period
    
    
if ($cant 0) {
        for(
$i=-1$i $cant$i++){
          if(
$i == 0){
              
$period1A $cd->getElementsByTagName("period")->item(0)->getAttribute('away_score');
            
$period1H $cd->getElementsByTagName("period")->item(0)->getAttribute('home_score');
          }elseif(
$i == 1){
            
$period2A $cd->getElementsByTagName("period")->item(1)->getAttribute('away_score');
            
$period2H $cd->getElementsByTagName("period")->item(1)->getAttribute('home_score'); 
          }elseif(
$i == 2){
            
$period3A $cd->getElementsByTagName("period")->item(2)->getAttribute('away_score');
            
$period3H $cd->getElementsByTagName("period")->item(2)->getAttribute('home_score');  
          }elseif(
$i == 3){
            
$period4A $cd->getElementsByTagName("period")->item(3)->getAttribute('away_score');
            
$period4H $cd->getElementsByTagName("period")->item(3)->getAttribute('home_score');  
          }
        }
    }else{
       
$period1A '';
       
$period1H '';
       
$period2A '';
       
$period2H '';
       
$period3A '';
       
$period3H '';
       
$period4A '';
       
$period4H '';
    } 
Trate de aplicar lo que me dijiste pero no se creo q no entendi :(

alguna ayudita amigo ?
  #10 (permalink)  
Antiguo 20/11/2013, 19:18
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como tomar estos nodos de este xml con PHP?

Te sobra el primer IF, el FOR y en vez de $i == 0 colocas $period->length == 0 ó $cant == 0.

Si no tienes period osea cero... ¿Para qué colocas el periodo 1? item(0) viene siendo el periodo 1.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Etiquetas: xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:58.