Comunidad de diseño web y desarrollo en internet online

Manejo de XML (inserción)

Citar            
MensajeEscrito el 22 Jul 2012 06:52 pm
Hola

Tengo un XML de esta forma:

Código XML :

<Cuadro>
  <Elemento id="0" N="ChildBefore" Tipo="M" Cx="200" Cy="380" F="3"/>
  <Elemento id="1" N="IGA" Tipo="D" Cx="200" Cy="380" F="2"/>
  <Elemento id="2" N="ChildAfter" Tipo="M" Cx="200" Cy="380" F="1"/>
</Cuadro>


El caso es que quiero agregar elementos, pero de dos formas, una agregando elementos con insertChildAfter e insertChildBefore. Con estos dos he agregado el nodo 0 y el 2 sin problemas.

Hasta ahí perfecto, el problema es que quiero insertar un hijo dentro de un elemento, y no consigo encontrar la forma de hacerlo, para que quede así:

Código XML :

<Cuadro>
  <Elemento id="0" N="ChildBefore" Tipo="M" Cx="200" Cy="380" F="3"/>
  <Elemento id="1" N="IGA" Tipo="D" Cx="200" Cy="380" F="2">
       <Elemento id="1" N="IGA" Tipo="D" Cx="200" Cy="380" F="2"/>
   </Elemento>
  <Elemento id="2" N="ChildAfter" Tipo="M" Cx="200" Cy="380" F="1"/>
</Cuadro>


La idea es hacer hijos, nietos, etc, en el árbol.
¿Alguna idea?

Un abrazo a todos y Gracias

Por TheMagoZero

41 de clabLevel



 

Ingeniero Técnico Industrial

firefox
Citar            
MensajeEscrito el 22 Jul 2012 08:26 pm
Después de algún cabezazo lo he conseguido, así que lo comparto por si a alguien le puede interesar

Partimos de un xml así:

Código XML :

<Cuadro>
  <Elemento id="1" Nombre="IGA" Tipo="Magnetotermico" Cx="200" Cy="380" FasesPolos="3"/>
</Cuadro>


Sólo tiene un elemento, para facilitar la comprensión.

Como veréis, el xml sólo tiene atributos (prefiero usarlo así), y se trata de hacer un árbol con él

Si quiero insertar nodos, me fabrico una función para posicionarse en el nodo con id 1 (u otro id que tengamos, en este caso sólo tenemos ese), así:

Código ActionScript :

//Se posiciona en un nodo específico dado por su 'id'
function posicionarseEnUnNodoEspecifico(XmlExterno:XML,numNodo:uint) {
//XmlExterno es el Xml en el que vamos a buscar, cargado con un loader (que no explico aquí, hay suficiente material sobre eso en Cristalab).
//La variable nodo es un Xml que contendrá el nodo que encontremos
var nodo:XML=new XML;
//numNodo es el id del nodo en el que queremos posicionarnos
//Recorro TODOS los nodos, hasta encontrar el que busco, y me quedo ahí (si lo encuentro, hago break para salir).

     for each(nodo in XmlExterno..Elemento){
     //Es de observar los .. en lugar de ., para que busque en el árbol completo (en este caso tenemos 1 nodo, pero podría haber muchos, y de hecho los habrá).

          if (Number(nodo.@id)==numNodo) {   
             break;
          }
     }
}


La variable nodo tiene ahora el valor de un Xml que comienza en el nodo con id=numNodo;

Es ahora cuando vamos a insertar:

Código ActionScript :

//1. Insertando elementos por encima del nodo 'nodo':
XmlExterno.insertChildBefore(nodo,"<Elemento id='1' Nombre='prova1' Tipo='Magnetotermico' Cx='200' Cy='380' FasesPolos='3'/>");Cx='200' Cy='380' FasesPolos='3'/>");

//2. Insertando elementos por debajo del nodo 'nodo':
XmlExterno.insertChildAfter(funcionesDeNodos.nodo,"<Elemento id='2' Nombre='prova2' Tipo='Fusible' Cx='200' Cy='380' FasesPolos='3'/>");

//3. Insertando nodos hijo dentro del nodo 'nodo':
nodo.appendChild("<Elemento id='3' Nombre='prova3' Tipo='Diferencial' Cx='200' Cy='380' FasesPolos='3'/>");

//Ojo con no poner " " sino ' ', en caso contrario dará errores

trace(XmlExterno);


El resultado es:

Código XML :

<Cuadro>
  <Elemento id="1" Nombre="prova1" Tipo="Magnetotermico" Cx="200" Cy="380" FasesPolos="3"/>
  <Elemento id="1" Nombre="IGA" Tipo="Magnetotermico" Cx="200" Cy="380" FasesPolos="3">
    <Elemento id="3" Nombre="prova3" Tipo="Diferencial" Cx="200" Cy="380" FasesPolos="3"/>
  </Elemento>
  <Elemento id="2" Nombre="prova2" Tipo="Fusible" Cx="200" Cy="380" FasesPolos="3"/>
</Cuadro>


Que era lo que queríamos conseguir.

Saludos a todos.

Javier
TheMagoZero

Por TheMagoZero

41 de clabLevel



 

Ingeniero Técnico Industrial

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.