Foros del Web » Programando para Internet » PHP »

DOMdocument Error

Estas en el tema de DOMdocument Error en el foro de PHP en Foros del Web. Buen día para todos. Estoy utilizando DOMdocument para extraer los datos de una tabla. Tengo un archivo index.php que tiene lo siguiente: <?php $url="tablaejemplo.php"; $html=file_get_contents($url); ...
  #1 (permalink)  
Antiguo 17/09/2012, 10:00
Avatar de Jorge1801  
Fecha de Ingreso: julio-2011
Ubicación: Colombia
Mensajes: 54
Antigüedad: 12 años, 9 meses
Puntos: 2
DOMdocument Error

Buen día para todos.

Estoy utilizando DOMdocument para extraer los datos de una tabla.


Tengo un archivo index.php que tiene lo siguiente:

<?php
$url="tablaejemplo.php";
$html=file_get_contents($url);

$dom = new DOMDocument();


$dom->loadHTML($html);

$dom->preserveWhiteSpace = false;

$tables = $dom->getElementsByTagName('tbody');

$rows = $tables->item(0)->getElementsByTagName('tr');

echo ' <table id="datatable" class="display">

<thead>
<tr>
<th>ID</th>
<th>Cedula</th>
<th>Nombre</th>

</tr>
</thead>
<tbody> ';
foreach ($rows as $row)
{

$cols = $row->getElementsByTagName('td');


echo "<tr>";
echo "<td>". $cols->item(0)->nodeValue. "</td>";
echo "<td>". $cols->item(1)->nodeValue. "</td>";
echo "<td>". $cols->item(2)->nodeValue. "</td>";

echo "</tr>";


}
echo '

</tbody>

</table>


';

?>


Y tengo otro archivo llamado tablaejemplo.php que tiene lo siguiente:


<table border="1">
<thead>
<tr>
<th>ID</th>
<th>Cedula</th>
<th>Nombre</th>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo "1" ?></td>
<td><?php echo "123" ?></td>
<td><?php echo "JORGE" ?></td>
</tr>
<tr>
<td>1</td>
<td>123</td>
<td>ANDRES</td>
</tr>
<tbody>
</table>


Pero al ejecutar el archivo index.php en el navegador, solo me sale la cabecera y la segunda fila. No se por que no me sale la primera fila.

Última edición por Jorge1801; 17/09/2012 a las 10:07
  #2 (permalink)  
Antiguo 17/09/2012, 12:40
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: DOMdocument Error

El problema está en tu script que tiene la tabla. file_get_contents() leerá el archivo sin procesarlo, pues está en el mismo servidor y directorio.

Si cambiás tus primeras líneas por esto, vas a ver:

Código PHP:
Ver original
  1. $url="tablaejemplo.php";
  2. $html=file_get_contents($url);
  3. echo $html;

Eso es porque lo está leyendo como un archivo de texto común. Diferente sería si se encontrara en otro servidor, dado que tiene que hacer el pedido al servidor y éste lo procesará.

Lo que podrías hacer es usar un "ouput buffer". Es decir, procesar el código PHP usando include() pero salvar el output en una variable, sin mostrarlo. Para eso, reemplazá:

Código PHP:
Ver original
  1. $url="tablaejemplo.php";
  2. $html=file_get_contents($url);

por:

Código PHP:
Ver original
  1. include('tablaejemplo.php');
  2. $html = ob_get_contents();
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 17/09/2012, 15:21
Avatar de Jorge1801  
Fecha de Ingreso: julio-2011
Ubicación: Colombia
Mensajes: 54
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: DOMdocument Error

Cita:
Iniciado por Naahuel Ver Mensaje
El problema está en tu script que tiene la tabla. file_get_contents() leerá el archivo sin procesarlo, pues está en el mismo servidor y directorio.

Si cambiás tus primeras líneas por esto, vas a ver:

Código PHP:
Ver original
  1. $url="tablaejemplo.php";
  2. $html=file_get_contents($url);
  3. echo $html;

Eso es porque lo está leyendo como un archivo de texto común. Diferente sería si se encontrara en otro servidor, dado que tiene que hacer el pedido al servidor y éste lo procesará.

Lo que podrías hacer es usar un "ouput buffer". Es decir, procesar el código PHP usando include() pero salvar el output en una variable, sin mostrarlo. Para eso, reemplazá:

Código PHP:
Ver original
  1. $url="tablaejemplo.php";
  2. $html=file_get_contents($url);

por:

Código PHP:
Ver original
  1. include('tablaejemplo.php');
  2. $html = ob_get_contents();

Excelente. Eso era lo que buscaba. Tengo otra dudita.

Al yo encerrar la tabla en un div, por ejemplo:

<div id="contenido">

<table border="1">
<thead>
<tr>
<th>ID</th>
<th>Cedula</th>
<th>Nombre</th>
<th>Apellido</th>
<th>Curso</th>
</tr>
</thead>
<tbody>
<tr>
<td><?php print "1" ?></td>
<td><?php echo "123" ?></td>
<td><?php print "IBAÑEZ" ?></td>
<td><?php echo "IBAÑEZ" ?></td>
<td><?php print "SISTEMAS" ?></td>
</tr>
<tr>
<td>1</td>
<td>123</td>
<td>andres</td>
<td>ibañez</td>
<td>sistemas</td>
</tr>
<tbody>
</table>

</div>

Me sale el siguiente error:

Warning: DOMDocument::loadHTML()

Como puedo solucionar eso.

Muchas gracias
  #4 (permalink)  
Antiguo 17/09/2012, 15:25
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: DOMdocument Error

¿Seguro es eso? ¿No hiciste otro cambio? Yo no puedo reproducir el error, me toma la tabla bien.
__________________
nahueljose.com.ar
  #5 (permalink)  
Antiguo 17/09/2012, 15:31
Avatar de Jorge1801  
Fecha de Ingreso: julio-2011
Ubicación: Colombia
Mensajes: 54
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: DOMdocument Error

Cita:
Iniciado por Naahuel Ver Mensaje
¿Seguro es eso? ¿No hiciste otro cambio? Yo no puedo reproducir el error, me toma la tabla bien.
Me sale ese error cuando utilizo la etiqueta HTML5 section.
  #6 (permalink)  
Antiguo 17/09/2012, 15:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: DOMdocument Error

Cita:
Iniciado por Jorge1801 Ver Mensaje
Me sale ese error cuando utilizo la etiqueta HTML5 section.
Vaya, ¿y seguramente te informaste leyendo el manual de DomDocument para conocer sus limitaciones verdad?

A eso se le dice "perder valioso tiempo por no documentarse como es debido"
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 17/09/2012, 15:37
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: DOMdocument Error

Ah, eso es otra cosa :)

Podrías haber puesto el error completo para empezar, jaja.

No hay forma de corregir eso o de especificar un doctype para trabajar con DOMDocument. Desconozco si se puede (y no tengo ganas de probar o buscar ahora :P ) manipular esas etiquetas con DOMDocument.

Sin embargo si podés ignorar los warnings. Podés inhabilitar el reporte de errores de PHP (una vez que termines de desarrollar) o bien incluir esta línea:


después de $dom = new DOMDocument();

De esa forma queda al usuario el manejo de los errores. Leé la documentación de libxml_use_internal_errors para entender cómo hacerlo en forma correcta.
__________________
nahueljose.com.ar
  #8 (permalink)  
Antiguo 17/09/2012, 16:15
Avatar de Jorge1801  
Fecha de Ingreso: julio-2011
Ubicación: Colombia
Mensajes: 54
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: DOMdocument Error

Cita:
Iniciado por Naahuel Ver Mensaje
Ah, eso es otra cosa :)

Podrías haber puesto el error completo para empezar, jaja.

No hay forma de corregir eso o de especificar un doctype para trabajar con DOMDocument. Desconozco si se puede (y no tengo ganas de probar o buscar ahora :P ) manipular esas etiquetas con DOMDocument.

Sin embargo si podés ignorar los warnings. Podés inhabilitar el reporte de errores de PHP (una vez que termines de desarrollar) o bien incluir esta línea:


después de $dom = new DOMDocument();

De esa forma queda al usuario el manejo de los errores. Leé la documentación de [URL="http://php.net/manual/es/function.libxml-use-internal-errors.php"]libxml_use_internal_errors[/URL] para entender cómo hacerlo en forma correcta.

Muchas gracias por todo. Me fue de gran ayuda:
  #9 (permalink)  
Antiguo 17/09/2012, 16:45
Avatar de Jorge1801  
Fecha de Ingreso: julio-2011
Ubicación: Colombia
Mensajes: 54
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: DOMdocument Error

Cita:
Iniciado por Naahuel Ver Mensaje
Ah, eso es otra cosa :)

Podrías haber puesto el error completo para empezar, jaja.

No hay forma de corregir eso o de especificar un doctype para trabajar con DOMDocument. Desconozco si se puede (y no tengo ganas de probar o buscar ahora :P ) manipular esas etiquetas con DOMDocument.

Sin embargo si podés ignorar los warnings. Podés inhabilitar el reporte de errores de PHP (una vez que termines de desarrollar) o bien incluir esta línea:


después de $dom = new DOMDocument();

De esa forma queda al usuario el manejo de los errores. Leé la documentación de [URL="http://php.net/manual/es/function.libxml-use-internal-errors.php"]libxml_use_internal_errors[/URL] para entender cómo hacerlo en forma correcta.

Una ultima consulta.

Por que me sale este error:

Fatal error: Call to a member function getElementsByTagName()

Cuando trato de utilizar sesiones y traigo registros de una base de datos.

El codigo es el siguiente:

<?php
if(!isset($_SESSION['admin'])){

header( 'Location:' . BASE_URL . 'login/' );

}else{
?>
<table id="datatable" class="display">

<thead>
<tr>
<th>ID</th>
<th>C&eacute;dula</th>

</tr>
</thead>
<tbody>
<?php
foreach($regFun as $filaFun)
{
echo "<tr>";
echo "<td>". $filaFun['id_funci']. "</td>";
echo "<td>". $filaFun['ced_fun']. "</td>";
}
?>

</tbody>

</table>
<?php
}
?>

Cuando quito el if de la session me funciona normal.
  #10 (permalink)  
Antiguo 17/09/2012, 16:54
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: DOMdocument Error

No sé la verdad, tampoco puedo probar todo acá. Lo único que noto a la vista es que no estás cerrando los <tr> en tu foreach. Probá eso.

Acostumbrate a depurar. Usá var_dumps y echos para ver el contenido de las variables y ver dónde falla. Si sigue fallando, fijate qué tenes en $html antes de cargarlo en DOMDocument.
__________________
nahueljose.com.ar

Etiquetas: domdocument, html, tabla
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 23:34.