Usuário com melhor resposta
Adicionar atributo em certa linha do codigo XML

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 />
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
Todas as 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
-
-
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
-
-