Manipular XML no .NET

.NET

C#

XML

03/05/2017

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

Curtidas 0

Respostas

Daniella Gomes

Daniella Gomes

03/05/2017

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.
GOSTEI 0
POSTAR