Guilherme's profileGuilherme de Carvalho Ca...PhotosBlogListsMore Tools Help

Blog


    February 06

    Lendo arquivo XML com Xpath e XmlDocument

    Nesta semana me apareceu a necessidade de ler um arquivo XML, e não poderia utilizar DataSet ou DataTable para tal, aí desenvolvi este código para realizar o trabalho, visto que tinha que acessar além dos nós do XML atributos também. O Formato do arquivo XML é algo assim, reduzi o arquivo para melhorar o entendimento:

             <?xml version="1.0" encoding="utf-8"?>
                   <
    itens>
                      <
    item id="cliente">
                         <
    nomecampo><![CDATA[Nome do cliente]]></nomecampo>
                         <
    valorcampo><![CDATA[#$strnomecli]]></valorcampo>
                      </
    item>
                      <
    item id="funcionario">
                         <
    nomecampo><![CDATA[Nome do funcionário]]></nomecampo>
                         <
    valorcampo><![CDATA[#$strnomefunc]]></valorcampo>
                         <
    nomecampo><![CDATA[Matrícula Funcionário]]></nomecampo>
                         <
    valorcampo><![CDATA[#$stromatfunc]]></valorcampo>
                      </item>
     
                   
    </itens>

    Abaixo o código que desenvolvi, para tratar estes requisitos:
     

    Dim

    xmlDocumento As XmlDocument = New XmlDocument 'Criando um objeto XmlDocument
    Dim strCaminho As String = Server.MapPath("~/App_Data/ItensAtributos.xml") 'Criando um objeto String para conter o caminho do arquivo XML
    xmlDocumento.Load(strCaminho) 'Carregando o arquivo XML para o objeto XmlDocumento

    Dim navegadorXml As System.Xml.XPath.XPathNavigator = xmlDocumento.CreateNavigator 'Criando um XpathNavigator baseado no xmlDocumento

    Dim listaCat As New List(Of cl_modelodocumento_dto) 'Criando uma lista genérica, que irá receber os dados da consulta ao Xml

    Dim itemCat As cl_modelodocumento_dto 'Instanciando um objeto do tipo modelodocumento_dto

    Dim xmlNo As XmlNode 'Criando um XmlNode

    Dim xmlListaNomeCampo, xmlListaValorCampo As XmlNodeList 'Criando dos objetos do tipo XmlNodeList, que vão percorrer os nós do Xml

    Dim strAtributo As String = String.Empty 'Criando uma string que irá receber o conteúdo dos atributos ID dos nós ITEM do arquivo XML, mostrado acima

    Try

       For
    Each xmlNo In xmlDocumento.SelectNodes("/itens/item") 'Percorrendo todos os nós ITEM contidos no arquivo XML

          itemCat =

    New cl_modelodocumento_dto 'Criando um novo objeto do tipo modelodocumento_dto

          With itemCat 
             .titulo = xmlNo.SelectSingleNode(
    "@id").Value.ToString 'Atribuindo o conteudo do atributo ID dos nós ITEM à propriedade titulo do objeto itemCat
             listaCat.Add(itemCat) 'Adicionando o itemCat à lista genérica de itemCat 
          
    End With

          xmlListaNomeCampo = xmlNo.SelectNodes(
    "nomecampo") 'Retornando o conteúdo do nó nomecampo para o xmlNodeList xmlListaNomeCampo

          xmlListaValorCampo = xmlNo.SelectNodes(

    "valorcampo") 'Retornando o conteúdo do nó valorcampo para o xmlNodeList xmlListaValorCampo

       Next

    Catch ex As Exception

    End Try

    Esta é a minha solução que encontrei para o problema, claro que outros desenvolvedores podem achar outras soluções melhores, ou piores de resolverem o problema. Caso você ache uma solução melhor e desejar compartilhar envia como comentário.