Foros del Web » Programando para Internet » PHP »

DOM xml

Estas en el tema de DOM xml en el foro de PHP en Foros del Web. Hola a todos. Hace ya algún tiempo que no escribo código en PHP, pero estaba experimentando con DOM para parsear ficheros XML (ya había hecho ...
  #1 (permalink)  
Antiguo 19/12/2002, 15:33
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 11 meses
Puntos: 0
DOM xml

Hola a todos.

Hace ya algún tiempo que no escribo código en PHP, pero estaba experimentando con DOM para parsear ficheros XML (ya había hecho alguna prueba con Expat), y me he encontrado con algún que otro problemilla :(

He estado leyendo, principalmente, esto:
http://www.phpbuilder.com/columns/matt20001228.php3

Muy probablemente conocido por más de uno. El caso es que... no me están funcionando los ejemplos bien... ¿Es que hay algo que haya cambiado desde que se esribió ese artículo?

¿Os funcionan los ejemplos de ese tutorial?
¿Podéis recomendarme algún otro sitio donde leer acerca de esto?


Muchas gracias a todos por vuestro tiempo.


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #2 (permalink)  
Antiguo 19/12/2002, 15:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Bueno .. yo te recomiendo "links" hacia tutoriales sobre el tema ... no me preguntes mas pues de XML ando flojo xD ..

Parsing XML With DOMXML And PHP
Revisited: Creating an XML Content Feed With PHP

Y aquí hay unos cuantos artículos mas sobre PHP y XML
http://www.devshed.com/Server_Side/PHP

(algunos igual son repetídos .. ya sabes q los autores los suelen publicar en varios sistios .. y estos juntos con phpbuilder.com son de los mas conocidos).

Un saludo,
  #3 (permalink)  
Antiguo 19/12/2002, 15:58
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 11 meses
Puntos: 0
Gracias por los enlaces, Cluster, los iré mirando más despacio :)

Pero en el primer enlace por ejemplo (http://www.devarticles.com/art/1/44/3 ) está este ejemplo:

Código PHP:
<?php

$theXML 
"<?xml version='1.0'?>";
$theXML .= " <website><url>";
$theXML .= " ttp://www.devarticles.com";
$theXML .= " </url></website>";

$xmlDoc xmldoc($theXML);
$root $xmlDoc->root();

$node array_shift($root->children());
echo 
$node->content;

?>
Que tendría que sacar por pantalla la URL supuestamente; pero a mi no me imprime nada (tampoco da error). PHP está compilado con --with-dom. ¿Os funciona ese sencillo ejemplo a vosotros?


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico

Última edición por lical; 19/12/2002 a las 16:01
  #4 (permalink)  
Antiguo 19/12/2002, 16:11
Avatar de chubu  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 133
Antigüedad: 22 años, 9 meses
Puntos: 0
lical,

en mi experiencia con xml en php he sufrido varios dolores de cabeza al descubrir el problema que con el que tu te has topado: la implementacion de DOM en php cambia constantemente, si bien los cambios son cada vez más superficiales y menos profundos han sido importantes a lo largo de os ultimos releases (lease desde 4.1.0).

El principal problema con esto es que muchas de las clases que forman la familia de clases DOM han cambiado tanto sus nombres como los de sus propiedades y metodos. Por ejemplo, hay funciones que devolvian objetos tipo domelement y en un release posterior devuelven un domnode, y cosas por el estilo.

Lo peor del caso es que no hay documentacion del tema, y sobre dom y php hay muy poco online, asi que lo más recomendable es encontrar alguna documentacion de dom genérica, para conocer las familias de clases y objetos, metodos, propiedades, etc. y alguna documentacion de algun lenguaje puntual para ver los parametros de una y otra cosa (recuerdo haber utilizado un doc de dom para java), ya que las implementaciones mas nuevas tienden a acercarse al standard.

espero haberte sido util,

saludos,

chubu
__________________
:pensando:hay algo mal que no anda bien
  #5 (permalink)  
Antiguo 19/12/2002, 16:38
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 11 meses
Puntos: 0
Tienes razón, es algo que ya me ha dado tiempo a apreciar; tengo un par de libros que describen funciones de DOM que ahora han cambiado de nombre :-?

Seguiré buscando. Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #6 (permalink)  
Antiguo 19/12/2002, 16:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Chekea el manual de PHP:
http://www.php.net/manual/en/ref.domxml.php

Han cambiado los nombres de las funciones .. y otras las eliminaron ... (lo q no me kedó claro si apartir de la version 4.3.x ... algo mencionan pero no me quedó claro.)

tambien mira los "user comentes" hay historias con las libxml2 si las usas .... a la hora de compilar con opcion DOM ...

Y .. bueno se nota q avanzan con el tema DOM en PHP .. la version 4.3.0rc1 (en este caso mio de windows .. la extension pesa la php_domxml.dll como 300 kbytes .. la q me venia en el mismo link q dice en el articulo de descarga pesa como 30 kbytes aprox .. )

De todas formas probé algunos de los codigo del propio manual de PHP pero .. no me entero mucho así q no me funcionó ni uno :(

Un saludo,
  #7 (permalink)  
Antiguo 19/12/2002, 17:37
Avatar de chubu  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 133
Antigüedad: 22 años, 9 meses
Puntos: 0
logré el resultado esperado del script con este codigo:

Código PHP:
<?
$theXML 
"<?xml version='1.0'?>";
$theXML .= " <website><url>";
$theXML .= " ttp://www.devarticles.com";
$theXML .= " </url></website>";

$xmlDoc domxml_xmltree($theXML);
$website $xmlDoc->first_child();
$url $website->first_child();
$texto $url->first_child();

echo 
$texto->get_content();
?>
como veran cambiaron bastante la funcionalidad

saludos

chubu
__________________
:pensando:hay algo mal que no anda bien
  #8 (permalink)  
Antiguo 19/12/2002, 18:11
Avatar de AngelRoyo  
Fecha de Ingreso: marzo-2002
Ubicación: Santiago de Chile
Mensajes: 207
Antigüedad: 22 años, 8 meses
Puntos: 5
Pregunta

Duda..

¿Acaso no ahi funciones nativas de PHP para el manejo de XML?

¿Obligadamente ahi qu einstalar una libreria?

Saludos.
__________________
Hacerlo Bien Haciendo el Bien.
Jaso ezazu agur bero bat.
(c) 2002. Made in Chile.
Mi sistema es:
Win(98);Apache(1.3.x);PHP(4.1.1);mySQL(3.23.x)
!Califica este POSTEO¡
  #9 (permalink)  
Antiguo 19/12/2002, 18:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Y .. donde habrá un tutorial (manual ya está el de PHP.net con pocos ejemplos prácticos) que esté actualizado?

Probe tu ejemplo Chubo y va OK ..

ahora estaba jungando a ver si podria leer un XML externo con:

domxml_open_file("http://www.devarticles.com/devarticles_recent.xml");

pero no me va xD .. (el URL funciona es un XML valido ..) ... (bueno . no se como usarlo mejor dicho .. xDD)

Un saludo,
  #10 (permalink)  
Antiguo 20/12/2002, 02:38
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 11 meses
Puntos: 0
Vaya, es cierto, así si que funciona

Bueno, seguiré haciendo pruebas a ver si domino todo esto lo suficiente para poder emplearlo en mi web.


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #11 (permalink)  
Antiguo 20/12/2002, 02:51
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 11 meses
Puntos: 0
Por cierto, ¿Alguien ha descubierto ya cómo recuperaría n elementos de un archivo xml con DOM? Me explico:

Código:
<?xml version="1.0" ?>

<root>
      <tag1 id="1">
           <propiedad>
              <caracterisitica>valor</caracteristica>
           </propiedad>
      </tag>

      <tag id="2">
           <propiedad>
             <característica>valor</característica>
           </propiedad>
       </tag>
(...)
</root>
Quiero decir... saber de alguna manera cuantas "tags" hay y poder agrupar los valores de sus hijos (respectivos) en un array o algo así... eso ando buscando, pero me temo que va a costar xD


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #12 (permalink)  
Antiguo 20/12/2002, 04:19
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 11 meses
Puntos: 0
Ya más o menos lo comprendo:

Código:
<?xml version="1.0" ?>

<rootdoc>
	<user id="1">
		<username>user1</username>
		<surname>surname1</surname>
	</user>
	<user id="2">
		<username>user2</username>
                <surname>surname2</surname>
	</user>
</rootdoc>
Modificando las funciones del artículo que os decía, me ha quedado algo usable:

Código PHP:
<?php
function get_content($parent)
{
    
$nodes $parent->child_nodes();
    while (
$node array_shift($nodes))
    {
        if (
$node->node_type() == XML_TEXT_NODE)
            return 
$node->node_value();
    }
    return 
"";
}

function 
find_content($parent$name)
{
    
$nodes $parent->child_nodes();
    while (
$node array_shift($nodes))
    {
        if (
$node->node_name() == $name)
        {
            return 
get_content($node);
        }
    }
    return 
"";
}

function 
find_attr($parent$name$attr)
{
    if (
$parent->node_name() == $name)
    {
        
$attribs $parent->attributes();
        while (
$attrib array_shift($attribs))
        {
            if (
$attrib->name() == $attr)
            {
                return 
$attrib->value();
            }
        }
    }
    return 
"";
}


$archivo "./midoc.xml";
$doc domxml_open_file($archivo);

$root $doc->root();
$users $root->child_nodes();

while (
$user array_shift($users))
{
    if (
$user->node_type() == XML_ELEMENT_NODE)
    {
        echo 
"usuario\n";
        
$username find_content($user"username");
        
$surname find_content($user"surname");
        
$id find_attr($user"user""id");
        echo 
"Id: $id , usuario: $username , surname: $surname \n";
    }
}

echo 
"\n";
?>
Espero que a alguien esto le ayude
Yo más o menos ya lo voy comprendiendo.


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #13 (permalink)  
Antiguo 20/12/2002, 04:35
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años
Puntos: 5
Encuanto a la pregutna de angelroyo para dar soporte de xml a php hay k compilarlo y decirle k lo de, ./configure --enable-xml jeej y si hay funciones de tratamiendo de xml en php nativas.

http://www.php.net/manual/es/ref.xml.php
__________________
Usuario registrado de Linux #288725
  #14 (permalink)  
Antiguo 20/12/2002, 06:48
Avatar de Ferdy
Colaborador
 
Fecha de Ingreso: junio-2001
Ubicación: España
Mensajes: 1.430
Antigüedad: 23 años, 5 meses
Puntos: 0
Para eso quizá habría sido mejor hacer una XSL y utilizar las funciones que trae PHP para trabajar con Sablotron.

Sobre la documentación genérica........ pues os comento que el parser DOM de PHP se basa en libxml2..... así que la documentación debe ser parecida...


Salu2.Ferdy
__________________
Born to be free
Por una sociedad del conocimiento libre
  #15 (permalink)  
Antiguo 27/11/2003, 06:37
 
Fecha de Ingreso: septiembre-2003
Mensajes: 6
Antigüedad: 21 años, 1 mes
Puntos: 0
Hola gente:

Yo estoi migrando de asp a php, y al intentar leer un archivo xml con domxml me da siempre el mismo error, no ago mas que revisar el codigo y buscar documentacion, pero no encuentro la razon del error, mi codigo, por ahora es simple:

Código PHP:
$archivo="documento.xml";
$dom=domxml_open_file("archivo"); 
pero siempre me da este error:

Fatal error. Call to undefined function: domxml_open_file() in C:\wwwroot\probaXml\proba.php on line 3

en mirado la configuracion de php, y ya contiene la libreria de expat, y que yo sepa deberia funcionar sin ningun problema.

Algien me puede ayudar
  #16 (permalink)  
Antiguo 07/11/2006, 14:03
Avatar de chechun  
Fecha de Ingreso: diciembre-2001
Ubicación: Córdoba - Capital - Alber
Mensajes: 348
Antigüedad: 22 años, 10 meses
Puntos: 0
jaja, yo tengo el mismo problema. y nadie me puede ayudar..!
__________________
My Personal Site
Mundial 2010
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 22:04.