Jump to content
_marlon307

[Resolvido] Adicionar vários elementos em um tag XML C#

Recommended Posts

Preciso de adicionar vários elementos em uma determinada tag do meu XML. Mas o código que estou utilizando ele adiciona os elementos sempre na ultima linha do meu Xml.

 

Meu XML esta assim, e estou tentando adicionar vários elementos <planilha> na tag <Planilhas>

<Xml>
  <Relatorio>
    <NotasAReceber />
    <RotaValue />
    <CtrlEstoque />
    <Planilhas>
      
    </Planilhas>
  </Relatorio>
</Xml>

E o código que estou usando esta nesta forma

private void CarregarRelatorio ()
        {
            bool consulta = false;

            if (ComboBoxRota.Text != "")
            {
                XElement xml = XElement.Load(@"cache\" + DateProprie + ".xml");

                foreach (XElement x in xml.Elements("planilha"))
                {
                    if (ComboBoxRota.Text == x.Attribute("Rota").Value)
                    {
                        consulta = true;
                        break;
                    }
                }
                if (consulta == false)
                {
                    XElement x = new XElement("planilha");
                    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");
                }
            }
        }

 

Share this post


Link to post
Share on other sites
12 horas atrás, quintelab disse:

Você  terá que utilizar o AppendChild, pesquise sobre isso que encontrará exemplos.

Consegui fazer a leitura e gravar da forma que eu queria mas agora não estou conseguindo excluir um determinado item selecionado.

 O código que fiz e vi exemplos estava nessa forma

 

  	     public static void ExcluirItemRota(string Rota)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("config.xml");
                XmlElement mapElement = (XmlElement)xmlDoc.SelectSingleNode(@"//cfgRotas");

                if(mapElement != null)
                {
                    mapElement.RemoveAttribute(Rota);
                }
                xmlDoc.Save("config.xml"); 
            }

 

Share this post


Link to post
Share on other sites
1 hora atrás, quintelab disse:

Por que esta usando RemoveAttribute ?

Porque estou querendo remover uma linha especifica e não o nó inteiro.

Como você pode observa tem uma string no RemoveAttribute que quando carregada ela vai remover o item que colocar o nome

mapElement.RemoveAttribute(Rota);

Share this post


Link to post
Share on other sites
Em 27/04/2018 at 17:41, _marlon307 disse:

Consegui fazer a leitura e gravar da forma que eu queria mas agora não estou conseguindo excluir um determinado item selecionado.

 O código que fiz e vi exemplos estava nessa forma

 


  	     public static void ExcluirItemRota(string Rota)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("config.xml");
                XmlElement mapElement = (XmlElement)xmlDoc.SelectSingleNode(@"//cfgRotas");

                if(mapElement != null)
                {
                    mapElement.RemoveAttribute(Rota);
                }
                xmlDoc.Save("config.xml"); 
            }

 

Marlon, tenta algo desse tipo:

MapElements.Remove(Rota);

Ver se funciona.

Share this post


Link to post
Share on other sites
14 minutos atrás, rtavix disse:

Marlon, tenta algo desse tipo:


MapElements.Remove(Rota);

Ver se funciona.

 

 

Vlw amigo mas consegui fazendo dessa forma

public static void ExcluirItemRota(string Rota)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("config.xml");
                XmlElement mapElement = (XmlElement)xmlDoc.SelectSingleNode(@"//xRota[@Rota='"+ Rota +"']");

                if(mapElement != null)
                {
                    mapElement.ParentNode.RemoveChild(mapElement);
                }
                xmlDoc.Save("config.xml"); 
            }

Outra duvida que tenho agora e editar um valor de um elemento/

Share this post


Link to post
Share on other sites
1 minuto atrás, _marlon307 disse:

 

 

Vlw amigo mas consegui fazendo dessa forma


public static void ExcluirItemRota(string Rota)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("config.xml");
                XmlElement mapElement = (XmlElement)xmlDoc.SelectSingleNode(@"//xRota[@Rota='"+ Rota +"']");

                if(mapElement != null)
                {
                    mapElement.ParentNode.RemoveChild(mapElement);
                }
                xmlDoc.Save("config.xml"); 
            }

 

Que bom, boa sorte ae!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By andreia_sp
      Ola pessoal,
       
      nao sei se o correto seria nessa area, na duvida coloquei em C# porque minha aplicação está em C#.
      O problema é o seguinte: tenho um sistema desenvolvido que roda apenas localmente (intranet). Configurei o firewall pra liberar a porta e as outras maquinas acessam normalmente. A questao é que o IP da maquina onde foi hospedado é dinamico. Ou seja, diariamente as outras maquinas "perdem" o acesso.
      Tem como configurar de alguma forma que, independente do IP, todas as maquinas consigam acessar?
       
       
      Obrigada
    • By fernandoxwiggy
      Bom dia,
      Alguém já teve que desenvolver o CIOT da empresa E-frete em C#?
       
      Estou buscando exemplos de como fazer usando o web service deles (http://dev.efrete.com.br/Services/LogonService.asmx).
      Eu acredito que preciso chamar o "login" (depois o logout) dentro desse web service, mas ele é uma interface e não estou achando um exemplo de chamar um procedimento em um web service que seja um interface.
       
      Agradeço desde já se alguém puder ajudar.
    • By wagner9
      Olá companheiros,
       
      Preciso de ajuda para conseguir implementar um Feed de Notícias de um site parceiro em meu site. O pessoal do site parceiro me enviou os arquivos .xml, mas não consegui descobrir como implementar eles no meu site.
       
      Se alguem puder me ajudar, fico grato.
    • By User386_Denilson
      e aí pessoal, blz?
       
      Vou colocar aqui minha duvida...
      Tenho um projeto em net Core 2.2, usadon mongodb. Tenho uma collection antiga (Pessoas) que o pessoal foi alimentado com muita coisa, e agora estou organizando em pessoa fisica e pessoa juridica.
      Eu faço a busca usando o filtro por id:
      public async Task<PessoaDadosCad> GetPessoaFisica(string id) { var pessoa = await passaiMongoCollection.FindAsync(pessoa => pessoa.Id == id); var data = JsonConvert.SerializeObject(await pessoa.FirstOrDefaultAsync()); PessoaDadosCad simplifiedPerson = JsonConvert.DeserializeObject<PessoaDadosCad>(data.ToString()); return simplifiedPerson; }  
      (pessoa => pessoa.Id == id) ao executar esse comando de busca, a classe vinculada é Pessoa.
      Eu queria ver com vcs se tem como não vincular uma classe no momento da busca??
      Obrigado
    • By manigold
      Estou com um pequeno problema nessa parte:
      $monsters = simplexml_load_file($otdir . '/data/monster/monsters.xml') or die('<b>Could not load monsters!</b>'); foreach($monsters->monster as $monster) { $loot = simplexml_load_file($otdir . '/data/monster/' . $monster['file']); if($loot) { if($item = $loot->loot->item){ A pagina mostra a lista de items corretamente mas se eu tenho um item dentro de outro item ,como nesse exemplo:
      <loot> <item id="2148" countmax="100" chance="33750" /> <item id="2148" countmax="100" chance="33750" /> <item id="2672" countmax="5" chance="80000" /> <item id="7399" chance="80" /> <item id="2392" chance="1428" /> <item id="2033" chance="3190" /> <item id="2547" countmax="7" chance="6700" /> <item id="5948" chance="3040" /> <item id="1987" chance="100000"> <!-- bag --> O PROBLEMA É NESSA PARTE <item id="5882" chance="5920" /> <item id="2498" chance="888" /> <item id="7378" countmax="3" chance="8800" /> <item id="2146" chance="5300" /> <item id="2414" chance="1500"/> <item id="2528" chance="2333" /> <item id="7402" chance="2000" /> <item id="2492" chance="730" /> </item> </loot> Os items dentro do item com id 1987 não são mostrados .
      Me desculpem se a explicação não esta muito boa , não entendo nada de php e xml ,eu agradeço se alguem puder me ajudar.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.