Comunidad de diseño web y desarrollo en internet online

[AS3] XML eliminar nodo por contenido

Citar            
MensajeEscrito el 29 Oct 2007 11:24 pm
se puede eliminar un nodo por el nombre (valor) del contenido ?
por ejemplo de este xml:

Código :

<proyectos>
  <proyecto>uno</proyecto>
  <proyecto>dos</proyecto>
  <proyecto>tres</proyecto>
</proyectos> 


eliminar el nodo:

Código :

 <proyecto>uno</proyecto>


por medio de algun codigo que donde yo le de el valor de "uno" y me elimine ese nodo para que al final me quede el xml asi

Código :

<proyectos>
 <proyecto>dos</proyecto>
  <proyecto>tres</proyecto>
</proyectos>


he eliminado nodos pór medio del nombre de la etiqueta o por su atributo pero no logro hacerlo por medio del contenido espero me haya explicado.

gracias.

Por DiegoAzul

376 de clabLevel



 

Mx

firefox
Citar            
MensajeEscrito el 30 Oct 2007 01:51 pm
Postea el codigo que has usado para eliminar por etiqueta y atributo, para de ahi modificarlo.

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

msie7
Citar            
MensajeEscrito el 30 Oct 2007 03:33 pm

Código :

var mi_xml:XML = <proyectos>
  <borra>uno</borra>
  <proyecto>dos</proyecto>
  <proyecto>tres</proyecto>
</proyectos>;

delete mi_xml.borra;


trace(mi_xml);


si te fijas hay una etiqueta que se llama borrar entonces con

Código :

delete mi_xml.borra; 


me borra ese nodo y sale asi el nuevo xml

Código :

<proyectos>
  <proyecto>dos</proyecto>
  <proyecto>tres</proyecto>
</proyectos>


entonces el problema esta en que si quiero borrar la etiqueta dos y pongo:

Código :

delete mi_xml.proyecto;


me borra todo el xml y el resultado seria asi:

Código :

<proyectos>
  <borra>uno</borra>
</proyectos>

(osea me borra la etiqeuta tres tambien)

por eso es que me gustaria saber si hay algo que me borre el nodo dependiendo del valor del contenido y no de la etiqueta.


por ejemplo donde le diga que me borre el nodo donde su contenido sea ="uno" y me lo borre y quede asi:

Código :

<proyectos>
  <proyecto>dos</proyecto>
  <proyecto>tres</proyecto>
</proyectos>


gracias

Por DiegoAzul

376 de clabLevel



 

Mx

firefox
Citar            
MensajeEscrito el 30 Oct 2007 04:02 pm
puedes usar indices:

Código :

var mi_xml:XML = <proyectos>
<borra>uno</borra>
<proyecto>dos</proyecto>
<proyecto>tres</proyecto>
</proyectos>;

delete mi_xml.elements('proyecto')[0];

trace(mi_xml);

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 30 Oct 2007 04:56 pm
gracias master no queria eliminarlos por indice, pero con lo que me pusiste me dio una idea y al fin lo logre por contenido, gracias a gaby y master.

Por DiegoAzul

376 de clabLevel



 

Mx

firefox
Citar            
MensajeEscrito el 30 Oct 2007 09:26 pm
Queria preguntarte si al fin pudiste resolver tu problema?

De ser así podrías explicarme como?, yo quiero lograr eso mismo y, de paso quiero insertar nodos, según el ejemplo que mostraste sería algo así:

var mi_xml:XML = <proyectos>

<proyecto>uno</proyecto>

<proyecto>dos</proyecto>

<proyecto>tres</proyecto>

<proyecto>cuatro</proyecto>

<proyecto>cinco</proyecto>

</proyectos>;
Yo logro insertar de a uno así:
lorem.question[1].a[1] = 'algo', pero quiero hacerlo con una función para que me vaya agregando uno más.(no se si me hice explicar?)

Por Aleka

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Oct 2007 12:59 am
con appendChild agregas elementos por ejemplo:

Código :

var mi_xml:XML =<proyectos>
<proyecto>uno</proyecto>
<proyecto>dos</proyecto>
<proyecto>tres</proyecto>
<proyecto>cuatro</proyecto>
<proyecto>cinco</proyecto>
</proyectos>;


mi_xml.appendChild(<proyecto>seis</proyecto>)


trace(mi_xml)



ahora la funcion que hice es esta:

Código :


var mi_xml:XML =<proyectos>
<proyecto>uno</proyecto>
<proyecto>dos</proyecto>
<proyecto>tres</proyecto>
<proyecto>cuatro</proyecto>
<proyecto>cinco</proyecto>
</proyectos>;

function borrarNodo(milista_xml:XML,borrar:String):XML {

   var i:int=0;


   for each (var element:XML in milista_xml.elements()) {

      i++;
      if (element==borrar) {

         delete milista_xml.elements()[i-1];
         
      }if (i-2>=milista_xml.elements().length()&& element!=borrar) {
            return <examp>no se encontro</examp>;

         }
   }
   return milista_xml;
}

trace(borrarNodo(mi_xml,"uno"));




la funcion tiene dos parametros

Código :

borrarNodo(mi_xml,"uno")




el primero es el objeto xml y el segundo es el valor del contenido que quieres eliminar.

como veras solo funciona con esta estructura de xml

Código :

<proyectos>
<proyecto>uno</proyecto>
<proyecto>dos</proyecto>
<proyecto>tres</proyecto>
<proyecto>cuatro</proyecto>
<proyecto>cinco</proyecto>
</proyectos>


espero te sirva.

Por DiegoAzul

376 de clabLevel



 

Mx

firefox
Citar            
MensajeEscrito el 31 Oct 2007 01:34 am
supongo que este ejemplo que viene en la ayuda, puede complementar el tema:

Código :

package {
    import flash.display.Sprite;

    public class XmlExample extends Sprite {        
        public function XmlExample() {
            var employees:XML =
                <employees>
                    <employee ssn="123-123-1234">
                        <name first="John" last="Doe"/>
                        <address>
                            <street>11 Main St.</street>
                            <city>San Francisco</city>
                            <state>CA</state>
                            <zip>98765</zip>
                        </address>
                    </employee>
                    <employee ssn="789-789-7890">
                        <name first="Mary" last="Roe"/>
                        <address>
                            <street>99 Broad St.</street>
                            <city>Newton</city>
                            <state>MA</state>
                            <zip>01234</zip>
                        </address>
                    </employee>
                </employees>;

            trace(employees.employee[0].address.zip);   // 98765

            trace(employees.employee[1].@ssn);          // 789-789-7890

            trace(employees.employee.name);             // <name first="John" last="Doe"/>
                                                        // <name first="Mary" last="Roe"/>

            trace(employees..zip[0]);                   // 98765

            trace(employees..@ssn[1]);                  // 789-789-7890

            trace(employees..name);                     // <name first="John" last="Doe"/>
                                                        // <name first="Mary" last="Roe"/>

            trace(employees.employee[0].address.*);     // <street>11 Main St.</street>    
                                                        // <city>San Francisco</city>
                                                        // <state>CA</state>
                                                        // <zip>98765</zip>
            var node:String = "zip";
            trace(employees.employee[0].address[node]); // 98765
            
            var attribute:String = "ssn";
            trace(employees.employee[1].@[attribute]);  // 789-789-7890
            
            for each (var num:XML in employees..@ssn) {
                trace(num);                             // 123-123-1234
            }                                           // 789-789-7890
            
            var ssnToFind:String = "789-789-7890";
            trace(employees.employee.(@ssn == ssnToFind).toXMLString());
                                                        // <employee ssn="789-789-7890">
                                                        // <name first="Mary" last="Roe"/>
                                                        // <address>
                                                        // <street>99 Broad St.</street>
                                                        // <city>Newton</city>
                                                        // <state>MA</state>
                                                        // <zip>01234</zip>
                                                        // </address>
                                                        // </employee>
        }
    }
}


Sobre todo el ultimo, que es lo que estabas buscando para eliminar por contenido.

Saludos!

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox

 

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