none
Adicionar atributo em certa linha do codigo XML RRS feed

  • Pergunta

  • Estou usando o XML.Linq para gravar meus arquivos e gostaria de uma e gostaria de adicionar algumas linhas em parte especificas do XML. E meu xml tem os seguintes elementos

    > <Xml> <Relatorio> <Planilhas /> //Adicionar os sequintes items no mesmo formato aki quando clicar em um boao

    <Planilha Rota="TESTE" Funcionario="TESTE" SaidaP="0" VoltaP="0" Deposito="R$ 0,00" Gasto="R$ 0,00" Cheque="R$ 0,00" Moeda="R$ 0,00" Falta="R$ 0,00" Sobra="R$ 0,00" Observacoes="" /> <PlanilhaRota="TESTE1" Funcionario="TESTE" SaidaP="" VoltaP="" Deposito="R$ 0,00" Gasto="R$ 0,00" Cheque="R$ 0,00" Moeda="R$ 0,00" Falta="R$ 0,00" Sobra="R$ 0,00" Observacoes="" />

    </Relatorio> </Xml>

    esse o Codigo

            private void LancarPlanilhas ()
            {
                bool consulta = false;
                XElement xml = XElement.Load(@"cache\" + DateProprie + ".xml");
    
                if (ComboBoxRota.Text != "")
                {
                    foreach (XElement d in xml.Elements())
                    {
                        if (ComboBoxRota.Text == d.Attribute("Rota").Value)
                        {
                            consulta = true;
                            break;
                        }
                    }
                    if (consulta == false)
                    {
                        XElement x = new XElement("Relatorio");
                        x.Add(new XAttribute("Rota", ComboBoxRota.Text));
                        x.Add(new XAttribute("Funcionario", TbFuncionario.Text.ToUpper())); TbFuncionario.Clear();
                        x.Add(new XAttribute("SaidaP", TbSaida.Text)); TbSaida.Clear();
                        x.Add(new XAttribute("VoltaP", TbVolta.Text)); TbVolta.Clear();
                        x.Add(new XAttribute("Deposito", TbDeposito.Text)); TbDeposito.Clear();
                        x.Add(new XAttribute("Gasto", TbGasto.Text)); TbGasto.Clear();
                        x.Add(new XAttribute("Cheque", TbCheque.Text)); TbCheque.Clear();
                        x.Add(new XAttribute("Moeda", TbMoeda.Text)); TbMoeda.Clear();
                        x.Add(new XAttribute("Falta", TbFalta.Text)); TbFalta.Clear();
                        x.Add(new XAttribute("Sobra", TbSobra.Text)); TbSobra.Clear();
                        x.Add(new XAttribute("Observacoes", TbObservacao.Text.ToUpper())); TbObservacao.Clear();
                        xml.Add(x);
                        xml.Save(@"cache\" + DateProprie + ".xml");
                        ListGrid = ClassGridLpHome.ListaRelatorio(DateProprie);
                        ListGridHome.DataSource = ListGrid;
                        //-------------http://www.linhadecodigo.com.br/artigo/3449/manipulando-arquivos-xml-em-csharp.aspx Estudo XML-------------------
                    }
                }
            }

    Queria modifica-lo para adiciona no lugar especifico do xml <Planilhas />

    terça-feira, 17 de abril de 2018 02:01

Respostas

  • Tayler, se o meu entendimento da sua proposta estiver certo, tente o seguinte:

    A solução que encontrei seria você carregar seu XML com o XmlDocument e seu node Planilhas no elemento XmlNode da seguinte forma:

    XmlDocument xml = new XmlDocument();
    xml.Load(sPath);

    //your customization here

    XmlNode node = xml.GetElementsByTagName("Planilhas")[0]; (node as XmlElement).SetAttribute("Rota", "ComboBoxRota.Text"); (node as XmlElement).SetAttribute("Funcionario", "TbFuncionario"); (node as XmlElement).SetAttribute("SaidaP", "TbSaida"); (node as XmlElement).SetAttribute("VoltaP", "TbVolta"); (node as XmlElement).SetAttribute("Deposito", "TbDeposito"); (node as XmlElement).SetAttribute("Gasto", "TbGasto"); (node as XmlElement).SetAttribute("Cheque", "TbCheque"); (node as XmlElement).SetAttribute("Moeda", "TbMoeda"); (node as XmlElement).SetAttribute("Falta", "TbFalta"); (node as XmlElement).SetAttribute("Sobra", "TbSobra"); (node as XmlElement).SetAttribute("Observacoes", "TbObservacao");

    Posteriormente você pode trabalhar melhorar nesta forma que ele está buscando o elemento, considerando apenas o index 0...

    O output neste caso seria:

    <Planilhas Rota="ComboBoxRota.Text" Funcionario="TbFuncionario" SaidaP="TbSaida" VoltaP="TbVolta" Deposito="TbDeposito" Gasto="TbGasto" Cheque="TbCheque" Moeda="TbMoeda" Falta="TbFalta" Sobra="TbSobra" Observacoes="TbObservacao" />

    Veja se é este o desafio que precisa de solução...

    []'s

    • Marcado como Resposta tayler0009 terça-feira, 17 de abril de 2018 14:32
    terça-feira, 17 de abril de 2018 14:06

Todas as Respostas

  • Bom dia Tayler, beleza?

    Deixa eu ver se entendi... Você quer adicionar os atributos XML dentro da tag <Planilhas> ?

    []'s

    terça-feira, 17 de abril de 2018 13:32
  • Bom dia Tayler, beleza?

    Deixa eu ver se entendi... Você quer adicionar os atributos XML dentro da tag <Planilhas> ?

    []'s

    Exatamente
    terça-feira, 17 de abril de 2018 13:42
  • Tayler, se o meu entendimento da sua proposta estiver certo, tente o seguinte:

    A solução que encontrei seria você carregar seu XML com o XmlDocument e seu node Planilhas no elemento XmlNode da seguinte forma:

    XmlDocument xml = new XmlDocument();
    xml.Load(sPath);

    //your customization here

    XmlNode node = xml.GetElementsByTagName("Planilhas")[0]; (node as XmlElement).SetAttribute("Rota", "ComboBoxRota.Text"); (node as XmlElement).SetAttribute("Funcionario", "TbFuncionario"); (node as XmlElement).SetAttribute("SaidaP", "TbSaida"); (node as XmlElement).SetAttribute("VoltaP", "TbVolta"); (node as XmlElement).SetAttribute("Deposito", "TbDeposito"); (node as XmlElement).SetAttribute("Gasto", "TbGasto"); (node as XmlElement).SetAttribute("Cheque", "TbCheque"); (node as XmlElement).SetAttribute("Moeda", "TbMoeda"); (node as XmlElement).SetAttribute("Falta", "TbFalta"); (node as XmlElement).SetAttribute("Sobra", "TbSobra"); (node as XmlElement).SetAttribute("Observacoes", "TbObservacao");

    Posteriormente você pode trabalhar melhorar nesta forma que ele está buscando o elemento, considerando apenas o index 0...

    O output neste caso seria:

    <Planilhas Rota="ComboBoxRota.Text" Funcionario="TbFuncionario" SaidaP="TbSaida" VoltaP="TbVolta" Deposito="TbDeposito" Gasto="TbGasto" Cheque="TbCheque" Moeda="TbMoeda" Falta="TbFalta" Sobra="TbSobra" Observacoes="TbObservacao" />

    Veja se é este o desafio que precisa de solução...

    []'s

    • Marcado como Resposta tayler0009 terça-feira, 17 de abril de 2018 14:32
    terça-feira, 17 de abril de 2018 14:06

  • Posso usar este método como exemplo para fazer a leitura do código tambem? E se tive um tutoria de exemplo podeira passar para eu me aprofundar mais. Porque os que eu achei ate não entendi muito bem.
    terça-feira, 17 de abril de 2018 14:42
  • A leitura fica bem simples... você pode acessar o node chamando pelo nome, assim:

    XmlDocument xml = new XmlDocument();
    xml.Load(sPath);
    
    xml["node"].InnerText; //Acessar o texto do nó
    xml["node"].Attributes["atributo"].InnerText; //Acessar o atributo do nó

    É interessante você dar uma lida na documentação da classe:

    https://msdn.microsoft.com/pt-br/library/system.xml.xmldocument%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    Depois que você pegar o jeito, tudo fica mais fácil

    Espero ter ajudado.

    []'s

    terça-feira, 17 de abril de 2018 15:02
  • E se fosse pra eu adicionar varis atributos dentro das tags?


    terça-feira, 17 de abril de 2018 15:50
  • E se fosse pra eu adicionar varis atributos dentro das tags?


    É só utilizar o mesmo procedimento da resposta, usando o SetAttribute() no seu node em questão armazenado no objeto XmlNode, exatamente igual no exemplo...

    terça-feira, 17 de abril de 2018 17:14