Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

_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");
                }
            }
        }

 

Compartilhar este post


Link para o post
Compartilhar em outros 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"); 
            }

 

Compartilhar este post


Link para o post
Compartilhar em outros 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);

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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/

Compartilhar este post


Link para o post
Compartilhar em outros 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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por Jack Oliveira
      Boa noite galera..
       
      Estou tentando gerar um sitemap com php
       
      So que tenho que por o limit 1200 
       
      mais que isso ele nao gera e se deixar sem limit 
       
      Obs: o banco de dados contem mais de 10 mil registros
      <?php // Data e hora atual $datetime = new DateTime(date('Y-m-d H:i:s')); // A linha abaixo me retornará uma data no seguinte formato: 2017-11-22T00:06:23-02:00 $date = $datetime->format(DateTime::ATOM); // ISO8601 // Gera o arquivo XML do sitemap $xml = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <url> <loc>'.ConfigPainel('site_url').'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; $Query = DBRead('cidades','*',"WHERE status ='1' ORDER BY nome ASC"); if (is_array($Query)) { foreach ($Query as $modcid) { $xml .=' <url> <loc>'.ConfigPainel('site_url').''.$modcid['subdominio'].'/</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; //$QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC"); $QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC LIMIT 1200"); if (is_array($QueryR)) { foreach ($QueryR as $v) { $Queryc = DBRead('cidades', '*',"WHERE id='{$v['cidade']}' ORDER BY nome ASC")[0]; if(empty($v['slug'])) { }else{ $urlseo = ''.ConfigPainel('site_url').''.$Queryc['subdominio'].'/list/'.$v['slug'].'/'; $xml .=' <!-- INICIO DA EMPRESA '.TRIM($v['titulo']).' --> <url> <loc>'.$urlseo.'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>0.85</priority> </url> <!-- FIM DA EMPRESA '.TRIM($v['titulo']).' --> '; } }} }} $xml .= ' </urlset>'; // Abre o arquivo ou tenta cria-lo se ele não exixtir $arquivo = fopen('../sitemap.xml', 'w'); if (fwrite($arquivo, $xml)) { Redireciona('./index.php?sucesso'); } else { Redireciona('?erro'); } fclose($arquivo); // Compactar arquivo sitemap para GZIP $data = implode("", file("sitemap.xml")); $gzdata = gzencode($data, 9); $fp = fopen("sitemap.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp); // Envia para o Google o novo sitemap gerado $urlSitemap = "http://www.google.com/webmasters/sitemaps/ping?sitemap=".ConfigPainel('site_url').""; // Arquivos a serem enviados $Files = ['sitemap.xml', 'sitemap.xml.gz']; // Envia os dois arquivos sitemap gerados para a URL do Google foreach ($Files as $file) { $url = $urlSitemap . $file; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } ?> Caso ouve outra forma que eu possa gerar este sitemap com php fico grato...
    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por luis0101010
      1.      Programe uma função que recebe um número inteiro e verifica se todos os dígitos deste número são iguais ou diferente e liste eles em ordens crescentes.
      Obs: Código fonte com no mínimo de 10 dígitos.
       
      Como exemplo, os números 456, −235, e 5 satisfazem esta condição, enquanto que o número 6 não.
       
      2.      Crie também a função main que recebe o valor do número digitado pelo usuário e exibe na tela uma mensagem informando se os dígitos deste número são iguais.
       
      Exemplo:
      --Exemplo 1:
      Informe um número:
      -555
      Numero informado possui todos os dígitos iguais
      --Exemplo 2:
      Informe um número:
      67
      Número informado não possui todos os dígitos iguais
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.