Leer XML con PHP
Hola, estoy aprendiendo php y necesito leer un archivo xml desde un php.
El xml es algo así:
<code>(menor que)?xml version='1.0' encoding='utf-8'?(mayor que)
<Sucesos>
(menor que)Hecho HechoKey="1"(mayor que)Primer suceso</Hecho>
(menor que)Hecho HechoKey="2"(mayor que)Segundo suceso</Hecho>
(menor que)Hecho HechoKey="3"(mayor que)Tercer suceso</Hecho>
(menor que)Hecho HechoKey="4"(mayor que)Cuarto suceso</Hecho>
</Sucesos></code>
Y el php que tengo es algo así:
<code>(menor que)?php
$sucesos = simplexml_load_file('sucesos.xml');
echo "$sucesos->Hecho<br>";
?(mayor que)</code>
Con esto consigo que aparezca el primer suceso, pero no sé cómo pedirle que me muestre el suceso del número que yo quiero, en función del HechoKey.
He probado varias formas y nada...
¿Alguien puede ayudarme?
Gracias.
dagi3d
para eso lo mejor es usar xpath:
<code>
$key = 1;
$doc = new DOMDocument();
$doc->load('fichero.xml');
$xpath = new DOMXPath($doc);
$nodes = $xpath->query("//Hecho[@HechoKey=$key]");
</code>
http://es.php.net/manual/es/class.domxpath.php
http://www.zvon.org/xxl/XPathTutorial/General/examples.html
Freakme
<code>Warning: domdocument::domdocument() expects at least 1 parameter, 0 given
Fatal error: Call to undefined method domdocument::load()</code>
Lo acabo de probar y no funciona dagi3d :S
dagi3d
tienes php5 instalado?
he comprobado el código y funciona perfectamente...
Freakme
Utilizo el xampp para probar en localhost y no me funciona... :S
De todas formas ya he conseguido lo que quería mediante:
<code>$id=0;//con volver a declarar la $id me dará el registro que quiero
$fase0 = simplexml_load_file('sucesos.xml');
echo $fase0->hecho->hechokey[$id]."<br>";</code>
Pronto tendré problemas con lo siguiente paso :'( ... pero poco a poco... jeje
Gracias :D
dagi3d
para saber qué versión tienes instalada puedes hacerte un documento que llame a la función phpinfo()
Freakme
tengo la 5.2.6
por cierto, cuando pongo acentos o la letra "ñ" en el documento php, o sus variantes como código me dá error :S
¿cómo puedo ponerlos?