Hola, creo que este va ha ser mi primer mensaje. El caso es que estoy pillado con un tema y la verdad es que no veo la luz
Explico; tengo un documento xml que manipulo con php (borro nodos, introduzco nuevos, modifico y muevo nodos de lugar). El problema lo tengo cuando introduzco un nodo nuevo por segunda vez, pongo un ejemplo para que me entiendan.
<cultural>
<atributos id="0" tag="1">
<titulo>www</titulo>
<imagen>/ww.jpg</imagen>
<arquitecto>ww</arquitecto>
<año>2008-2011</año>
</atributos>
<atributos id="1" tag="2">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<atributos id="2" tag="3">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<cultural>
<deportiva>
<atributos id="3" tag="4">
<titulo>www</titulo>
<imagen>/ww.jpg</imagen>
<arquitecto>ww</arquitecto>
<año>2008-2011</año>
</atributos>
<atributos id="4" tag="5">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<atributos id="5" tag="6">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<deportiva>
Cuando creo un nuevo nodo, ejemplo:
<atributos id="6" tag="7">
<titulo>www</titulo>
<imagen>/ww.jpg</imagen>
<arquitecto>ww</arquitecto>
<año>2008-2011</año>
</atributos>
El primero no me da problema, el problema es cuando quiero añadir otro nodo delante del que ya he creado anteriormente.
Así quedaría cuando añado el primero:
<cultural>
<atributos id="6" tag="7"><titulo>dfsv</titulo><imagen>dsf.jpg</imagen><arquitecto>q</arquitecto><año>2008-2010</año></atributos><atributos id="0" tag="1">
<titulo>www</titulo>
<imagen>/ww.jpg</imagen>
<arquitecto>ww</arquitecto>
<año>2008-2011</año>
</atributos>
<atributos id="1" tag="2">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<atributos id="2" tag="3">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<cultural>
<deportiva>
<atributos id="3" tag="4">
<titulo>www</titulo>
<imagen>/ww.jpg</imagen>
<arquitecto>ww</arquitecto>
<año>2008-2011</año>
</atributos>
<atributos id="4" tag="5">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<atributos id="5" tag="6">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<deportiva>
Ahora si intento añadir uno delante del que he creado se coloca al final de cultural. Si coloco manualmente el nodo en una linea distinta, entonces funciona.
ejemplo.
<cultural>
<atributos id="6" tag="7">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<atributos id="0" tag="1">
<titulo>www</titulo>
<imagen>/ww.jpg</imagen>
<arquitecto>ww</arquitecto>
<año>2008-2011</año>
</atributos>
<atributos id="1" tag="2">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<atributos id="2" tag="3">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<cultural>
<deportiva>
<atributos id="3" tag="4">
<titulo>www</titulo>
<imagen>/ww.jpg</imagen>
<arquitecto>ww</arquitecto>
<año>2008-2011</año>
</atributos>
<atributos id="4" tag="5">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<atributos id="5" tag="6">
<titulo>dfsv</titulo>
<imagen>dsf.jpg</imagen>
<arquitecto>q</arquitecto>
<año>2008-2010</año>
</atributos>
<deportiva>
La función para crear el nodo es la siguiente:
function CrearNodo($anext,$aid,$atitulo,$aimagen,$aarqui,$a year,$idioma,$posicion){
// $anext nodo seleccionado que será utilizado como guía para colocar el nuevo
//$posicion --> Indica donde se colocara el nodo nuevo partiendo de uno seleccionado($anext): $posicion=0 se coloca encima del seleccionado, $posicion=1 se coloca debajo del seleccionado.
// id del nuevo nodo= $aid; texto titulo= $atitulo; nombre de la imagen con =$aimagen
// texto del arquitecto= $aarqui; texto del año= $ayear; idioma= $idioma
$xml = new DOMDocument();
$xml->preserveWhitespace = false;
$xml->load('../xml/'.$idioma.'/proyectos.xml');
$xpath = new DOMXPath($xml);
$nodo = $xpath->query('//atributos[@tag="'.$anext.'"]')->item(0);
if ($nodo){
$newnodo = $xml->createElement('atributos','');
$atributo = $xml->createAttribute('id');
$newnodo->appendChild($atributo);
$atributo_valor = $xml->createTextNode($aid);
$atributo->appendChild($atributo_valor);
$atributoTag = $xml->createAttribute('tag');
$newnodo->appendChild($atributoTag);
$nuevo=(string)BuscarNuevo($idioma);
$atributo_valorTag = $xml->createTextNode($nuevo);
$atributoTag->appendChild($atributo_valorTag);
if ($posicion=='next'){
$nodo->parentNode->insertBefore($newnodo, $nodo->nextSibling);
}else if ($posicion=='prev'){
$nodo->parentNode->insertBefore($newnodo, $nodo->previousSibling);
}
$nodo = $xpath->query('//atributos[@tag="'.$nuevo.'"]')->item(0);
if ($nodo){
$titulo = $xml->createElement('titulo',$atitulo);
$nodo->appendChild($titulo);
if ($aimagen !="null"){
$imagen= $xml->createElement('imagen','imagenes/proyectos/'.$aimagen.'.jpg');
}else{
$imagen= $xml->createElement('imagen',$aimagen);
}
$nodo->appendChild($imagen);
$arquitecto= $xml->createElement('arquitecto',$aarqui);
$nodo->appendChild($arquitecto);
$year= $xml->createElement('año',$ayear);
$nodo->appendChild($year);
$xml->save('../xml/'.$idioma.'/proyectos.xml');
}
}
}
Gracias por adelantado.
Un saludo