Comunidad de diseño web y desarrollo en internet online

Modificar Nodos de un tree que tiene XML como DataProvider

Citar            
MensajeEscrito el 02 Oct 2004 11:29 am
^^ Hola, soy nuevo en este foro , porque no me habia decidido todavia a preguntar. La verdad es que he estado mirando de arriba a abajo las preguntas (creo! porque ya estoy un poco espeso) y estoy desesperado porque nadie tiene mi problema, o eso creo :? .

Bueno, la situación:

tengo un tree con sus nodos majos, al cual quiero ir añadiendo otros nodos que cargo de base de datos, pero quiero que este nuevo XML se me cargue justo debajo del nodo que acabo de picar en el tree.

He intentado hacer mil y una historias y no me he salido.

Lo que quiero es no tener que cargar toda la estructura del tree, e ir cargando los nodos hijos a medida que pico en cada uno de los nodos padres (que crean estos hijos).

primer problema) con un "lista.selectedIndex" no hay forma (o no sé) de seleccionar el nodo que corresponde en el xml.

segundo problema) al hacer (para simular que adjunto otro xml):

var x=new XML();
x.parseXML("<node label=\"Hola\" />");
nodo_actual.appendChild(x);

en el tree se me crea un nodo añadido de la forma [type function],[type function]. Jaarr! ezo que eh?

No se si voy por buen camino. Estoy aprendiendo esto de los componentes a marchas forzadas y claro, hay cosas que me superan. :cry:

Estoy bastante desesperado porque llevo ya 2 dias intensos y ya lo he probado todo. Además he de presentar un proyecto al que quiero incluir esta funcionalidad y claro, no puerdooor! :shock:


Por cierto, tengo Flash MX 2004 Professional. (tenia que decirlo)
Muchas gracias!

Por cubico

3 de clabLevel



Genero:Masculino  

Tarragona (España)

unknown
Citar            
MensajeEscrito el 02 Oct 2004 01:03 pm
Bueno, respecto al segundo problema solo tenia que añadir nodo_actual.appendChild(x.firstChild);

;)


Respecto a la primera lo que hago es recorrer todo el xml y comparar, p.ej, el label del selectedIndex con los labels del xml, para insertarlo en ese nodo, pero para ello hago una búsqueda recursiva que, creo yo, no es muy eficiente....

a alguien se le ocurre como puede solventar esto?

Muchas gracias again!

Por cubico

3 de clabLevel



Genero:Masculino  

Tarragona (España)

unknown
Citar            
MensajeEscrito el 02 Oct 2004 02:34 pm
Depende como tengas implementado el xml

si lo tienes asi:

<root>
<Node label = "Hola"> <contenido>Este es el contenido del nodo Hola </contenido></Node>
.....
<Node label = "Hola1"><contenido> Este es el contenido de Hola 2</contenido></Node>
</root>

es muy facil y eficiente utilizar xpath

Código :

import mx.xpath.*;

//En el onload del xml pones

path = "/*/contenido[@label='" + label_a_buscar + "']"

contedino = XPathAPI.selectNodeList(this.firtsChild,path)[0].firstChild.NodeValue;
//En contenido te pondra el contenido del label del xml que tiene el mismo nombre que label_a_buscar.


Prueba a ver con eso, si no te tracea bien a this, this.firstChild y path para ver si tienen los valores correctos.

Otra cosa, para utilizar xpath, debes incluir en tu libreria la clase DataBindigClases que esta en ventana/otros paneles/bibliotecas comunes/clases en el 2004 español, si es en ingles colo traduce cada una de estas palabras y mas o menos encontraras el camino.

No estoy seguro que el codico ese funcione, solo lo puese para que tengas una idea, pero es por esa linea la cosa. si tienes duda en cuanto a la conexion tirate el code y veremos que hacemos.

Por Alucard

54 de clabLevel



Genero:Masculino  

Universidad

unknown
Citar            
MensajeEscrito el 02 Oct 2004 06:25 pm
Gracias Alucard,

he estado probando varias cosas y no he llegado a nada en concreto,... bueno si, he pasado de un undefined a un null.

el xml es tal que así:

Código :


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<node>
     <node label="Area" tipo="area>
   <node label="Zona1" tipo="zona">
      <node label="Calle1" tipo="calle">
         <node label="Casa1" tipo="casa">
            <node    label="Habitacion11" tipo="hab" />
                                 <node    label="Habitacion12" tipo="hab" />
         </node>
         <node label="Casa2" tipo="casa">
            <node    label="Habitacion 21" tipo="hab" />
         </node>
      </node>
   </node>
     </node>
</node>



Y claro, lo que quiero hacer es primero cargar todas las Area, para luego cargas las Zonas del Área que he apretado, y así sucesivamente.

Una vez tengo el label del elemento que he apretado debo añadir la información por debajo de este nodo, así que tengo que situarme sobre el nodo en cuestion y "attachar" la nueva información.

Para ello, por ejemplo, si he apretado en casa2, tendré que coger la información de las habitaciones de casa2, situarme sobre el nodo que lleva por label="Casa2" y es de tipo="casa".

Como Alucard me ha indicado he hecho esto:

Código :

 label_a_buscar="Casa2"; 
 path = "/node/*/node[@label='" + label_a_buscar + "']"

contenido = XPathAPI.selectNodeList(this.firstChild,path)[0].firstChild.nodeValue;
      
trace(contenido);


... y he obtenido un maravilloso "null" :?

Lo he liado más o está más claro....??

Por cubico

3 de clabLevel



Genero:Masculino  

Tarragona (España)

unknown
Citar            
MensajeEscrito el 02 Oct 2004 10:36 pm
el error debe estar en el path, revisa bien el camino, ya que yo no lo he usado para xml tan idexados.

no obtante si quieres le quitas nodeValue, eso lo que va a hacer es darle el valor nodo convertido en string, pero si no lo pones lo obtienes igual, lo que seria un objeto.

Por Alucard

54 de clabLevel



Genero:Masculino  

Universidad

unknown
Citar            
MensajeEscrito el 02 Oct 2004 11:11 pm
Si, si...claro que está ahí...
lo que pasa es que no se como hacer una búsqueda generica, porque si te das cuenta, no puedo buscar a una ruta en concreto porque el nombre puede estar en cualquier posicion.

he probado, como tu me comentas, sin el nodeValue, y he trazado el contenido...

me encuentra algo con
- /node/node/node[@label='talcosa']
- /node/*/node[...]
pero he probado con:

- /*
- /
- /*[@label=...]
-/*[@label]*

e incluso con

- //*

sin ningun valor!!!!!!!
raro,raro,raro...

me estoy mirando online documentacion de xpath y te aseguro que he probado mil y una maneras...
hay algo que podria haber solucionado las cosas pero tampoco me funciona:

haciendo:
<node:casa>
<node:hab>
</node:casa>

y buscando por /*[name()='casa'] tampoco me funciona la cosa...

Desesperado estoy. Un mal jedi seré. :oops:

Por cubico

3 de clabLevel



Genero:Masculino  

Tarragona (España)

unknown
Citar            
MensajeEscrito el 04 Oct 2004 01:02 pm
sobre el tema del XPATH. Me ha costado pero al final de un fin de semana intenso lo he logrado. Bueno.. he descubierto algo:

Mis librerias de XPATH de flash (import mx.xpath.*) NO funcionan! No se si es mi versión de Flash o qué, pero estas librerias no funcionan correctamente (búsquedas recursivas).

Hoy he probado con otras librerias y, fíjate por donde, que me funcionan a la primera!
Las fabulosas librerias estan en:

[url]http://www.xfactorstudio.com/Actionscript/AS2/XPath[/url]

(hay dos versiones para actionscript y actionscript2, yo he utilizado las últimas).

Así que tema resuelto, mi búsqueda queda algo así:

[code]var path="//*[contains(@label,'"+nodo_label+"') and @tipo='"+nodo_tipo+"']";[/code]

y como digo, funciona perfectamente..
No ibas mal encaminado, Alucard!. Muchas gracias por ese empujoncito! :wink:

Ahora mi problema es otro... :lol:

¿Como puedo actualizar visualmente, el nuevo nodo que he creado dentro del tree?
Ahí lo dejo... ^^
Al primero que me responda le mando una piruleta por correo! :P

Por cubico

3 de clabLevel



Genero:Masculino  

Tarragona (España)

unknown

 

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