none
Verificar texto da text box se e o mesmo do arquivo XML RRS feed

  • Pergunta

  • Estou tentando fazer um codigo que pega o valor que esta dentro do arquivo XML e compara com uma texbox para ver se o texto e igual. Se for igual ele nao registra um novo item e se for diferente ele vai adicionar. O problema e que estou usando o operador != para verificar e ele esta registrando mesmo quando o nome esta igual o que já foi registrado.

            private void BttAddRota_Click(object sender, EventArgs e)
            {
                if(TbAddRota.Text != "")
                {
                    XElement xml = XElement.Load("config.xml");
    
                    foreach(XElement d in xml.Elements())
                    {
                        if(TbAddRota.Text.ToUpper() != d.Attribute("Rota").Value)//Verificador
                        {
                            XElement x = new XElement("cfgRotas");
                            x.Add(new XAttribute("Rota", TbAddRota.Text.ToUpper()));
                            xml.Add(x);
                            xml.Save(@"config.xml");
                            InsertCombBox.ComboBoxRota.Items.Add(TbAddRota.Text.ToUpper());
                            InsertCombBox.ComboBoxRota.Refresh();
                            TbAddRota.Clear();
                            ListGrid = ClassGridRota.ListarRotas();
                            ListGridRota.DataSource = ListGrid;
                            break;
                        }
                    }
                }
                else
                {
                    MetroFramework.MetroMessageBox.Show(this, "\n\nAdicione um nome para a ROTA!\nE clique em ADICIONAR.", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    //-------------------http://denricdenise.info/2015/09/how-to-use-metromessagebox/-------------
                }
            }


    • Editado tayler0009 quinta-feira, 12 de abril de 2018 23:45 ajustes
    quinta-feira, 12 de abril de 2018 23:44

Respostas

  • Olá amigo,

    Criei um exemplo abaixo e funcionou, tente assim:

         XmlDocument document = new XmlDocument();
                document.LoadXml("<test success=\"false\" > <reply success=\"false\">More nodes go here</reply><nome>edson</nome></test>");
                ConfigurarXML(document.ChildNodes);
    
            /// <summary>
            /// Método recursivo para todos os nós do XML
            /// </summary>
            /// <param name="nodes"></param>
            static void ConfigurarXML(XmlNodeList nodes)
            {
                foreach (XmlNode node in nodes)
                {
    
    
                    XmlNode parent = node.ParentNode;
                    if (parent.Attributes != null && parent.Attributes["success"] != null)
                        if (parent.Attributes["success"].Value == "false")//Verificador
                        {
                            //SEU NOVO ATRIBUTO
                            var attr = node.OwnerDocument.CreateAttribute("test");
                            attr.Value = "true";
                            parent.Attributes.SetNamedItem(attr);
                            parent.Attributes["success"].Value = "true";
                        }
    
                    if (node.HasChildNodes) ConfigurarXML(node.ChildNodes);
                }
            }

    Abraço!

    • Marcado como Resposta tayler0009 terça-feira, 17 de abril de 2018 01:50
    sexta-feira, 13 de abril de 2018 13:35

Todas as Respostas

  • Olá amigo,

    Criei um exemplo abaixo e funcionou, tente assim:

         XmlDocument document = new XmlDocument();
                document.LoadXml("<test success=\"false\" > <reply success=\"false\">More nodes go here</reply><nome>edson</nome></test>");
                ConfigurarXML(document.ChildNodes);
    
            /// <summary>
            /// Método recursivo para todos os nós do XML
            /// </summary>
            /// <param name="nodes"></param>
            static void ConfigurarXML(XmlNodeList nodes)
            {
                foreach (XmlNode node in nodes)
                {
    
    
                    XmlNode parent = node.ParentNode;
                    if (parent.Attributes != null && parent.Attributes["success"] != null)
                        if (parent.Attributes["success"].Value == "false")//Verificador
                        {
                            //SEU NOVO ATRIBUTO
                            var attr = node.OwnerDocument.CreateAttribute("test");
                            attr.Value = "true";
                            parent.Attributes.SetNamedItem(attr);
                            parent.Attributes["success"].Value = "true";
                        }
    
                    if (node.HasChildNodes) ConfigurarXML(node.ChildNodes);
                }
            }

    Abraço!

    • Marcado como Resposta tayler0009 terça-feira, 17 de abril de 2018 01:50
    sexta-feira, 13 de abril de 2018 13:35
  • Olá amigo,

    Criei um exemplo abaixo e funcionou, tente assim:

         XmlDocument document = new XmlDocument();
                document.LoadXml("<test success=\"false\" > <reply success=\"false\">More nodes go here</reply><nome>edson</nome></test>");
                ConfigurarXML(document.ChildNodes);
    
            /// <summary>
            /// Método recursivo para todos os nós do XML
            /// </summary>
            /// <param name="nodes"></param>
            static void ConfigurarXML(XmlNodeList nodes)
            {
                foreach (XmlNode node in nodes)
                {
    
    
                    XmlNode parent = node.ParentNode;
                    if (parent.Attributes != null && parent.Attributes["success"] != null)
                        if (parent.Attributes["success"].Value == "false")//Verificador
                        {
                            //SEU NOVO ATRIBUTO
                            var attr = node.OwnerDocument.CreateAttribute("test");
                            attr.Value = "true";
                            parent.Attributes.SetNamedItem(attr);
                            parent.Attributes["success"].Value = "true";
                        }
    
                    if (node.HasChildNodes) ConfigurarXML(node.ChildNodes);
                }
            }

    Abraço!

    Mano desculpa mas eu não entendi essa parte

    "<test success=\"false\" > <reply success=\"false\">More nodes go here</reply><nome>edson</nome></test>"

    Não tem outra forma mais simples de fazer a verificação comparando um texto? sendo um texto do arquivo e o outro do textbox?


    sexta-feira, 13 de abril de 2018 16:25
  • Olá, boa tarde

    Essa parte eu coloquei o meu exemplo de xml, neste caso vc deveria substituir com os seus parâmetros.

    Abraço!

    sexta-feira, 13 de abril de 2018 17:17
  • Olá, boa tarde

    Essa parte eu coloquei o meu exemplo de xml, neste caso vc deveria substituir com os seus parâmetros.

    Abraço!

    E onde fica o local do arquivo para fazer a pesquisa?
    sexta-feira, 13 de abril de 2018 17:32
  • Altere de:

      document.LoadXml("<test success=\"false\" > <reply success=\"false\">More nodes go here</reply><nome>edson</nome></test>");

    para:

    document.Load("LOCAL_ARQUIVO");
    

    Abraço!

    sexta-feira, 13 de abril de 2018 18:06
  • Esta dando erro na hora de executar o programa, e o erro e na linha do local da pasta 
    document.Load("config.xml");
     System.Xml.XmlException: 'Dados no nível raiz inválidos. Linha 1, posição 1.'
    sexta-feira, 13 de abril de 2018 18:59