Manipular XML no .NET

03/05/2017

0

Boa tarde Pessoal.
Estou com um problema em obter dados em XML.
Consegui realizar a leitura das informações por um Loop utilizando o XmlTextReader, mas acredito que tenha uma forma de fazer algo mais genérico como temos em Json que é gerar um método que aceite qualquer classe, transformando um XML na classe solicitada.

Fiz um exemplo do que estou tentando fazer e coloquei no GIT.

Se alguém puder me passar um exemplo ou artigo vai me ajudar muito.

Segue o link com o projeto de teste.

[url:descricao=Código completo]https://github.com/phsdeveloper/DotNet_ParseXML[/url]

 private void MTD_LerXML_01()
        {
            string caminhoArquivo = App_Components.Utils.MTD_ObterCaminhoArquivo(cbo_Arquivos.Text);
            System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(caminhoArquivo);
            System.Text.StringBuilder stb_dados = new StringBuilder();


            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case System.Xml.XmlNodeType.None:
                        stb_dados.AppendFormat("Tipo: None   Name =  | Value = ", reader.Name, reader.Value);

                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.Element:
                        stb_dados.AppendFormat("Tipo: Element   Name =  | Value = ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.Attribute:
                        stb_dados.AppendFormat("Tipo: Attribute   Name =  | Value = ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.Text:
                        stb_dados.AppendFormat("Tipo: text   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.CDATA:
                        stb_dados.AppendFormat("Tipo: CDATA   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.EntityReference:
                        stb_dados.AppendFormat("Tipo: EntityReference   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.Entity:
                        stb_dados.AppendFormat("Tipo: Entity   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.ProcessingInstruction:
                        stb_dados.AppendFormat("Tipo: ProcessingInstruction   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.Comment:
                        stb_dados.AppendFormat("Tipo: Comment   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.Document:
                        stb_dados.AppendFormat("Tipo: Document   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.DocumentType:
                        stb_dados.AppendFormat("Tipo: DocumentType   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.DocumentFragment:
                        stb_dados.AppendFormat("Tipo: DocumentFragment   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.Notation:
                        stb_dados.AppendFormat("Tipo: Notation   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.Whitespace:
                        stb_dados.AppendFormat("Tipo: Whitespace   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.SignificantWhitespace:
                        stb_dados.AppendFormat("Tipo: SignificantWhitespace   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.EndElement:
                        stb_dados.AppendFormat("Tipo: EndElement   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.EndEntity:
                        stb_dados.AppendFormat("Tipo: EndEntity   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    case System.Xml.XmlNodeType.XmlDeclaration:
                        stb_dados.AppendFormat("Tipo: XmlDeclaration   Name =  | Value ", reader.Name, reader.Value);
                        stb_dados.Append(Environment.NewLine);
                        break;
                    default:
                        break;
                }
            }
            txt_saida.Text = stb_dados.ToString();



        }
    
        private void MTD_XmlDocumento()
        {
            System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
            string st_caminhoXML = App_Components.Utils.MTD_ObterCaminhoArquivo(cbo_Arquivos.Text);
            xmlDoc.Load(st_caminhoXML);

            string valor1 = xmlDoc.SelectSingleNode("Produto").ChildNodes[0].InnerText;
            string valor2 = xmlDoc.SelectSingleNode("Produto").ChildNodes[1].InnerText;
            string valor3 = xmlDoc.SelectSingleNode("Produto").ChildNodes[2].InnerText;

            txt_saida.Text = valor1 + Environment.NewLine + valor2 + Environment.NewLine + valor3;

        }

        private void MTD_ConvertForClass()
        {
            using (System.IO.TextReader reader = new System.IO.StringReader(App_Components.Utils.MTD_LerArquivoTexto(cbo_Arquivos.Text)))
            {
                System.Xml.Serialization.XmlSerializer serializer_ = new System.Xml.Serialization.XmlSerializer(typeof(Integracao.Produtos_Lista));
                var lista = (Integracao.Produtos_Lista)serializer_.Deserialize(reader);

                if (lista != null)
                {
                    if (lista.Produto == null)
                        txt_saida.Text = "Não foi realizado o Deserialize do XML";
                    else
                        txt_saida.Text = lista.Produto[0].departamentoId.ToString();
                }
                else
                    txt_saida.Text = "Não há valores na lista";

            }
        }

Paulo Santos

Paulo Santos

Responder

Posts

08/05/2017

Daniella Gomes

Olá Paulo, acredito que os conteúdos abaixo podem te ajudar a tirar essa dúvida:
Video - https://www.devmedia.com.br/serializando-objetos-em-xml-com-c/30971
Artigo https://www.devmedia.com.br/xdocument-manipulando-arquivos-xml-no-net/25112
Espero ter ajudado.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar