XML - Problemas con DOM y PHP : XML declaration allowed

 
Vista:

Problemas con DOM y PHP : XML declaration allowed

Publicado por Alex (1 intervención) el 28/02/2007 12:10:32
Hola,

estoy recuperando informacion de un fichero RSS, os adjunto un ejemplo abajo.

Intento cargar el fichero RSS con PHP para luego extraer la informacion de los Tags y guardarlos en una BDD, pero cuando intento cargar el fichero me sale el siguiente error:

XML declaration allowed only at the start of the document.

Supongo que es que la declaracion del fichero XML contiene un espacio en blanco antes del primer TAG y por eso me lo coje mal, pero he buscado en foros y no encuentro la solucion.

Con un codigo tan simple como :

<?php
$doc= new DOMDocument();
$doc->load("./rss.xml");
echo $doc->saveXML();

ya me sale el error en load. Con otros RSS de otras fuentes no me sale ese error. Sabe alguien la solucion???

Gracias de antemano,

Alex

Aqui va el fichero de ejemplo:

<?xml version="1.0" encoding="utf-8" ?>
- <root>
- <weekend>
- <destination>
- <![CDATA[ Londres - 2j/1n
]]>
</destination>
- <description>
- <![CDATA[ Train + Hôtel + Pdj
]]>
</description>
- <url>
- <![CDATA[ http://www.advences.com/mirror/OP_20041215_londres.cfm?ref=2004051702
]]>
</url>
- <prix>
- <![CDATA[ 103
]]>
</prix>
</weekend>
- <weekend>
- <destination>
- <![CDATA[ Barcelone
]]>
</destination>
- <description>
- <![CDATA[ Du 9 au 11 mars Vol+Hôtel 3*
]]>
</description>
- <url>
- <![CDATA[ http://www.opodo.fr/opodo/trip/Search.do?method=search&originInput=Paris&destination=420&outboundDate=09&outboundDate=200703&returnDate=11&returnDate=200703
]]>
</url>
- <prix>
- <![CDATA[ 221
]]>
</prix>
</weekend>
</root>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Solución para error al cargar archivo XML en PHP

Publicado por Alejandro (258 intervenciones) el 14/07/2023 17:12:01
El error "XML declaration allowed only at the start of the document" se produce cuando hay contenido antes de la declaración XML en el archivo XML. En tu caso, parece haber un espacio en blanco o algún otro tipo de contenido antes de la declaración XML, lo cual es la causa del error.

Para solucionar este problema, puedes utilizar la función `file_get_contents()` en PHP para leer el contenido del archivo XML como una cadena y luego eliminar cualquier contenido no deseado antes de la declaración XML. Aquí tienes un ejemplo de cómo puedes hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$filename = "./rss.xml";
$xmlString = file_get_contents($filename);
 
// Buscar la posición de la primera aparición de '<?xml'
$pos = strpos($xmlString, '<?xml');
 
// Eliminar cualquier contenido antes de la declaración XML
if ($pos !== false) {
    $xmlString = substr($xmlString, $pos);
}
 
$doc = new DOMDocument();
$doc->loadXML($xmlString);
echo $doc->saveXML();
?>

Este código lee el contenido del archivo XML utilizando `file_get_contents()` y luego busca la posición de la primera aparición de `<?xml`. A continuación, utiliza la función `substr()` para eliminar cualquier contenido antes de la declaración XML. Después de eso, puedes cargar el XML utilizando `loadXML()` en lugar de `load()`, ya que ahora estás pasando una cadena XML válida.

Con este enfoque, deberías poder cargar el archivo XML sin errores y procesarlo adecuadamente. Asegúrate de ajustar la ruta del archivo XML según sea necesario en la variable `$filename` en el código.

Recuerda que, en general, es recomendable tener archivos XML válidos sin contenido no deseado antes de la declaración XML. Si tienes acceso a la fuente del archivo XML, intenta corregir el problema directamente en el archivo fuente para evitar problemas futuros.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar