Foros del Web » Programando para Internet » PHP »

Php + xml

Estas en el tema de Php + xml en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 26/07/2012, 12:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 2
Antigüedad: 11 años, 10 meses
Puntos: 0
Php + xml

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

Etiquetas: xml
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




La zona horaria es GMT -6. Ahora son las 13:13.