none
comparar dos elementos almacenados en xml RRS feed

  • Pregunta

  • ola a todos....
    continuando con xml, estoy trabajando en el tema y me encuentro ahora con esta duda: como comparar dos elementos en xml para ver si son iguales???
    ya que estoy mostrando la información almacenada en un xml en un combobox, deseo es crear el evento para el combobox CBSelectPais_SelectionChanged,
    de manera que al seleccionar digamos el codigo del pais IdPais=01 en el CBSelectPais, me muestre en el CBSelectDepartamento los departamentos que comparten este IdPais solamente.
    tengo los Combobox CBSelectPais, CBSelectDepartamento y CBSelectMunicipio, lo mismo que hago con pais y departamento, sucede con departamento y municipio...
    dejo tambien el xml con el que estoy trabajando.

    <BasesLocalesModuloPlaneacion>
      <Paises>
        <Pais IdPais="01" Nombre="Colombia"/>
        <Pais IdPais="02" Nombre="Panama"/>
        <Pais IdPais="03" Nombre="Venezuela"/>
        <Pais IdPais="04" Nombre="Peru"/>
        <Pais IdPais="05" Nombre="Ecuador"/>
        <Pais IdPais="06" Nombre="Chile"/>
        <Pais IdPais="07" Nombre="Brasil"/>
      </Paises>

      <Departamentos>
        <Departamento IdDepto="01" Nombre="Antioquia" IdPais="01"/>
        <Departamento IdDepto="02" Nombre="Caldas" IdPais="01"/>
        <Departamento IdDepto="03" Nombre="Risaralda" IdPais="01"/>
        <Departamento IdDepto="04" Nombre="Merida" IdPais="03"/>
        <Departamento IdDepto="05" Nombre="Meta" IdPais="01"/>
      </Departamentos>
    </BasesLocalesModuloPlaneacion>

    muchas gracias.....


    martes, 16 de marzo de 2010 14:56

Respuestas

  • hola a todos

    he podido avanzar un poco mas!!! (con ayuda)

    como ya tengo el código del país, entonces hago un filtro en la búsqueda con el IdPais en departamentos.

    tengo esto:

    //cargar informacion de departamentos
            private void CBSelectDepartamento_Loaded(object sender, RoutedEventArgs e)
            {
                string idpaisSelect = CBSelectPais.SelectedValue.ToString();
                XmlDocument buscar = new XmlDocument();
                buscar.Load("C:\\Documents and Settings\\PIE\\Mis documentos\\Visual Studio 2008\\Projects\\PlaneadordeProyectos\\PlaneadordeProyectos\\Recursos\\BasesLocales\\BasesLocales.xml");
                XmlNodeList departamentos = buscar.SelectNodes(string.Format("//Departamento[@IdPais='{0}']", idpaisSelect));
    
                foreach (XmlElement nodo in departamentos)
                {
                    //CBSelectDepartamento.Items.Insert(nodo.GetAttribute("IdDepto"), nodo.GetAttribute("Nombre"));
                }
            }
    pero ahora me saca es otro error,,, cuando inserto los nodos al combo, el primero debe ser un int y es tipo nodo... 
    como hago para convertir este "nodo.GetAttribute("iddepto")" en int???

    intente con un parse pero nada. asi: int.parse(nodo.GetAttribute("iddepto")), con lo que me saca este otro error:  El índice de inserción estaba fuera del intervalo. Debe ser no negativo y menor o igual que el tamaño.
    Nombre del parámetro: index

    mm, que hago???

    gracias
    • Marcado como respuesta ccmmasi miércoles, 17 de marzo de 2010 19:15
    • Desmarcado como respuesta ccmmasi miércoles, 17 de marzo de 2010 19:26
    • Marcado como respuesta ccmmasi jueves, 18 de marzo de 2010 20:41
    miércoles, 17 de marzo de 2010 16:03

Todas las respuestas

  • ola a todos...

    creo que ya he podido avanzar algo, 
    como al seleccionar el pais ya tengo su idpais, entonces solo debo buscar este codigo en departamentos, para lo cual estoy haciendo esto:

    //Cargar informacion XML a SelectDepartamento
            private void CBSelectDepartamento_Loaded(object sender, RoutedEventArgs e)
            {
                string idpaisSelect = CBSelectPais.SelectedValue.ToString();
                XmlDocument buscar = new XmlDocument();
                buscar.Load("C:\\Documents and Settings\\PIE\\Mis documentos\\Visual Studio 2008\\Projects\\PlaneadordeProyectos\\PlaneadordeProyectos\\Recursos\\BasesLocales\\BasesLocales.xml");
                XmlNodeList departamentos = buscar.GetElementsByTagName("Departamento");
    
                foreach (XmlElement nodo in departamentos)
                {
                    XmlNodeList idDepto = nodo.GetElementsByTagName("IdDepto");
                    XmlNodeList idPais = nodo.GetElementsByTagName("IdPais");
                    XmlNodeList NameDepto = nodo.GetElementsByTagName("Nombre");
    
                    if (idpaisSelect == idPais)
                    {
                        CBSelectDepartamento.Items.Insert(idDepto, NameDepto);
                    }
                }
            }



    creo que ya saben cual es el error, cuando comparo idpaisSelect con idPais (idpaisSelect es un string que contiene el codigo del pais que tome, idPais es un xmlnodelist), y cuando inserto los datos al combo CBSelectDepartamento, estoy insertando en el value el idDepto el cual es un xmlnodelist....

    creo que es mas o menos asi,,,,. espero ayuda... gracias


    martes, 16 de marzo de 2010 22:20
  • hola a todos

    he podido avanzar un poco mas!!! (con ayuda)

    como ya tengo el código del país, entonces hago un filtro en la búsqueda con el IdPais en departamentos.

    tengo esto:

    //cargar informacion de departamentos
            private void CBSelectDepartamento_Loaded(object sender, RoutedEventArgs e)
            {
                string idpaisSelect = CBSelectPais.SelectedValue.ToString();
                XmlDocument buscar = new XmlDocument();
                buscar.Load("C:\\Documents and Settings\\PIE\\Mis documentos\\Visual Studio 2008\\Projects\\PlaneadordeProyectos\\PlaneadordeProyectos\\Recursos\\BasesLocales\\BasesLocales.xml");
                XmlNodeList departamentos = buscar.SelectNodes(string.Format("//Departamento[@IdPais='{0}']", idpaisSelect));
    
                foreach (XmlElement nodo in departamentos)
                {
                    //CBSelectDepartamento.Items.Insert(nodo.GetAttribute("IdDepto"), nodo.GetAttribute("Nombre"));
                }
            }
    pero ahora me saca es otro error,,, cuando inserto los nodos al combo, el primero debe ser un int y es tipo nodo... 
    como hago para convertir este "nodo.GetAttribute("iddepto")" en int???

    intente con un parse pero nada. asi: int.parse(nodo.GetAttribute("iddepto")), con lo que me saca este otro error:  El índice de inserción estaba fuera del intervalo. Debe ser no negativo y menor o igual que el tamaño.
    Nombre del parámetro: index

    mm, que hago???

    gracias
    • Marcado como respuesta ccmmasi miércoles, 17 de marzo de 2010 19:15
    • Desmarcado como respuesta ccmmasi miércoles, 17 de marzo de 2010 19:26
    • Marcado como respuesta ccmmasi jueves, 18 de marzo de 2010 20:41
    miércoles, 17 de marzo de 2010 16:03
  • Hola Crituscam.

    Para realizar conversiones puedes hacer tambien uso de la clase Convert, es otra opcion para multiples conversiones, como por ejemplo:

    Convert.ToInt32("32");

    No obstante, el error parece ser de la conversion, asegurate de que el atributo obtenido se puede convertir a entero.


    Saludos
    David González
    miércoles, 17 de marzo de 2010 18:25
  • hola
    no dada, intente con parse, con convert y no me saca error para ejecutar, pero cuando cambio selecciono el pais de una en la funcion tratada me saca este error:

    El índice de inserción estaba fuera del intervalo. Debe ser no negativo y menor o igual que el tamaño.
    Nombre del parámetro: index... esto sucede cuando lo convierto a int, por alguna razon no me lo esta convirtiendo bien (Debe ser no negativo y menor o igual que el tamaño)....

    mmmmm
    miércoles, 17 de marzo de 2010 19:50
  • ola, 

    muchas gracias, 
    el error era mio, esta insertando el value como index, 

    marcado como respuesta porque la pregunta era comparar dos elementos xml y funciono!!!

    gracias
    jueves, 18 de marzo de 2010 20:42