Foros del Web » Programando para Internet » PHP »

Crear matriz en PHP con XML

Estas en el tema de Crear matriz en PHP con XML en el foro de PHP en Foros del Web. Buen día para todos! Quería hacer una consulta, será que es posible crear una matriz en PHP donde se pueda guardar la información de los ...
  #1 (permalink)  
Antiguo 25/03/2009, 06:44
 
Fecha de Ingreso: enero-2009
Mensajes: 85
Antigüedad: 15 años, 2 meses
Puntos: 2
Crear matriz en PHP con XML

Buen día para todos!

Quería hacer una consulta, será que es posible crear una matriz en PHP donde se pueda guardar la información de los nodos de un archivo XML???

Si alguien sabe de eso, me puede indicar mas o menos como podría hacerlo por favor??.

Muchas gracias de antemano.

Saludos!
  #2 (permalink)  
Antiguo 25/03/2009, 06:51
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
Respuesta: Crear matriz en PHP con XML

si se puede...

ejemplo:

Código:
<?xml version="1.0"?>
<books>
	<book>
		<author>Jack Herrington</author>
		<title>PHP Hacks</title>
		<publisher>O'Reilly</publisher>
	</book>
	<book>
		<author>Jack Herrington</author>
		<title>Podcasting Hacks</title>
		<publisher>O'Reilly</publisher>
	</book>
</books>
Código PHP:
<?php
$file
="books.xml";
$data =  file_get_contents($file); 
$xml simplexml_load_string($data);

// ejemplo
foreach ($xml->book as $book){
echo 
"Author: ".$book->author."<br />";
echo 
"Title: ".$book->title."<br />";
echo 
"Publisher: ".$book->publisher."<br />";
echo 
"<hr />";
}

?>
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #3 (permalink)  
Antiguo 25/03/2009, 07:26
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Crear matriz en PHP con XML

Código php:
Ver original
  1. $file="books.xml";
  2. $data =  file_get_contents($file);
  3. $xml = simplexml_load_string($data);

Puedes usar simplexml_load_file() directamente, sin tener que obtener el contenido con file_get_contents()
  #4 (permalink)  
Antiguo 25/03/2009, 07:33
 
Fecha de Ingreso: enero-2009
Mensajes: 85
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Crear matriz en PHP con XML

Hola!!

Muchas gracias por tu pronta respuesta!

Este código ya lo conocía, de hecho exactamente así es que llamo mi XML y me funciona a la perfección, mi idea es la siguiente:

Basándome en el mismo ejemplo que me diste, quería saber si yo puedo tomar uno de esos dos nodos a la cual le colocaste el nombre "book" y mostrarlo.

Para eso necesito contar todos los nodos llamados "bock" y mandar a imprimir en este caso solamente el primer nodo.

Eso es posible??? la verdad no tengo idea como hacerlo porque es la primera vez que trato a un XML de esta forma en PHP, por eso mi pregunta era si podía crear una matriz para ir mostrando poco a poco la información de los nodos que tienen el mismo nombre en posiciones diferentes de la página.

Muchas gracias de nuevo!
  #5 (permalink)  
Antiguo 25/03/2009, 07:40
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
Respuesta: Crear matriz en PHP con XML

no entiendo bien lo que queres hacer... si te explicas un poco mejor...
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #6 (permalink)  
Antiguo 25/03/2009, 08:08
 
Fecha de Ingreso: diciembre-2008
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Crear matriz en PHP con XML

sin pararme mucho con la explicacion puedes hacer lo siguiente:

tomando el xml a una variable en php, si lo que devuelve la funcion es un array, para pasarlo a una variable usa la funcion
Código PHP:
 $cadena_xml=implode("",$array_xml); 
asi no tienes que ir buscando en cada elemento del array,
luego usas la funcion
Código PHP:
$inicio_etiqueta=strpos($cadena_xml,"<book>")+5
el +5 del final es el numero de caracteres que contiene la cadena(etiqueta) que estas buscando
para averiguar la posicion de la primera etiqueta "<book>"
y de nuevo
Código PHP:
$final_etiqueta=strpos($cadena_xml,"</book>"); 
para que te devuelva la posicion de el cierre de la etiqueta, luego
restas
Código PHP:
$longitud_etiqueta=$final_etiqueta-$inicio_etiqueta+1
y sacas la subcadena a partir de inicio cogiendo el numero de caracteres que contiene la variable de longitud
Código PHP:
$info_etiqueta=substr($cadena_xml,$inicio_etiqueta,$longitud_etiqueta); 
ademas de esta hay otras formas, si sigues teniendo dudas te pongo alguna otra, porque creo que es esto mas o menos lo que buscas, sino da una especificacion mayor, saludos
  #7 (permalink)  
Antiguo 25/03/2009, 08:34
 
Fecha de Ingreso: enero-2009
Mensajes: 85
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Crear matriz en PHP con XML

Bien! jejeje gracias a todos por sus respuestas, creo que es hora de colocar algo de código para ver si me puedo explicar mejor, disculpen si no soy explícita. :S

tengo mi XML que tiene una estructura parecida a esta:

Cita:
<items>
<contenido>texto1</contenido>
<contenido>texto2</contenido>
<contenido>texto3</contenido>
</items>
El XML yo lo llamo a mi HTML de la siguiente forma con PHP 5:

Cita:
$archivo = file_get_contents('xml/prueba.xml');

$doc = simplexml_load_string($archivo);
foreach ($doc->items as $items){
echo $items->contenido;}
con el código antes colocado, lo que consigo es mostrar los datos de TODAS las etiquetas "contenido", pero a mi lo que me interesa es mostrar solo las dos primeras en este HTML.

He estado investigando un poco más la estructura para hacer eso y me he encontrado con dos alternativas, la primera es a través de un foreach de la siguiente forma:

Cita:
foreach($doc->xpath('//contenido){
instrucciones
}
El código antes expuesto me muestra la información de los TRES nodos que tiene el archivo XML.

y la otra es con position:

Cita:
$contenido = $doc->xpath('//contenido[position()=1]')
//donde $contenido es la variable a la que esta asociado el nodo "contenido"
El código anterior muestra solamente el nodo 1.

Pero ninguna de las dos formas me permite tomar un rango de los nodos que son iguales..., ya que quiero solo los primeros dos y no todo el documento hasta ahora.

Habrá alguna forma de establecer una condición que me diga el rango de los nodos que quiero que muestre??

Gracias por todos sus comentarios y sugerencias, voy tomando en cuenta todas sus acotaciones!!

Saludos a todos!
  #8 (permalink)  
Antiguo 25/03/2009, 09:20
 
Fecha de Ingreso: enero-2009
Mensajes: 85
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Crear matriz en PHP con XML

Señores, ya conseguí la forma de hacerlo!! con el siguiente foreach pude delimitar el numero de nodos que quiero que aparezcan en la página:

Cita:
foreach ($doc->xpath('//contenido[position()>=1 and position()<=5]') as $contenido){
echo $contenido;}
Ese foreach hace que me aparezca la información que almacenan los 4 primeros nodos "contenido" en la página HTML, así existan 1000 nodos solo mostrará los cuatro primeros o el rango que especifique en la condición.

Muchísimas gracias a todos por su colaboración!! y hasta otra oportunidad que seguramente será dentro de poco, jeje

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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:18.