Si el xml si es valido, lo que pasa es que la id no la tiene en la etiqueta que envuelve a las otras, sin no, ... mejor te pongo un ejemplo por que no se expresarme en los terminos correctos.
Código:
<vpt la=1 lo=2>
<name></name>
<car></car>
<gpk:logs>
<gpk:log id="39146139">
<gpk:date>fecha</gpk:date>
<gpk:type>perfecto</gpk:type>
<gpk:fin id="1">nombre</gpk:fin>
<gpk:text encoded="False">texto 1</gpk:text>
</gpk:log>
<gpk:log id="34860048">
<gpk:date>fecha2</gpk:date>
<gpk:type>perfecto</gpk:type>
<gpk:fin id="2">nombre2</gpk:fin>
<gpk:text encoded="False">Texto2</gpk:text>
</gpk:log>
</gpk:logs>
</vpt>
<vpt la=3 lo=4>
<name></name>
<car></car>
<gpk:logs>
<gpk:log id="39149856">
<gpk:date>fecha3</gpk:date>
<gpk:type>perfecto</gpk:type>
<gpk:fin id="3">nombre3</gpk:fin>
<gpk:text encoded="False">texto 3</gpk:text>
</gpk:log>
<gpk:log id="34863261">
<gpk:date>fecha4</gpk:date>
<gpk:type>perfecto</gpk:type>
<gpk:fin id="4">nombre4</gpk:fin>
<gpk:text encoded="False">Texto4</gpk:text>
</gpk:log>
</gpk:logs>
</vpt>
Este es el codigo verdadero. Yo necesito mostrar solo los datos que hay entre las etiquetas <gpk:logs></gpk:logs>, pero solo las del primer <vpt>. El problema que tengo es que hago un bucle siguiendo las pistas que me habeis ido dando para mostrarlos asi, por mostraros una de las formas que he probado:
Código:
$etiquetas = $xml->xpath( "//c:log" );
$numero = count ($etiquetas);
for ( $i = 0 ; $i <= $numero ; $i ++){
$ldate = $xml->xpath('//c:date');
echo $ldate[$i].'</br>';
Pero esto en vez de mostrarme los date de solo el <gpk:logs> de la primera etiqueta (<vpt la=1 lo=2>) me muestra todos los que hay en todas las etiquetas (fecha1,fecha2,fecha3,fecha4...etc)
Como puedo hacerlo para que solo me devuelva fecha1 y fecha 2 que son los que estan dentro de las primeras <gpk:logs>?
MUchisimas gracias por vuestra ayuda.