none
Ler campos das tags no XML VB.Net RRS feed

  • Pergunta

  • Estou precisando ler um campo que se encontra dentro de uma tag no xml porém estou com dificuldades, precisaria fazer isso para montar um contador. Meu projeto é ler o XML de uma venda e montar um cupom fiscal a partir disso, porém até o momento consegui apenas puxar um item da venda. Poderiam me ajudar ?

    Estrutura XML, no caso eu precisaria ler o campo "nItem" que se encontra na tag "det", pois assim talvez eu conseguiria puxar todos os itens: 

    <det nItem="1">
    <prod>
    <cProd>7898577370182</cProd>
    <xProd>J.WATANABE/COUVE MANTE</xProd>
    <vItem>0.99</vItem>
    </prod>
    </det>
    <det nItem="2">
    <prod>
    <cProd>66396</cProd>
    <xProd>GRANEL/ALHO KG</xProd>
    <vItem>1.62</vItem>
    </prod>
    </det>

    Estrutura VB.NET

            Dim produto As New BindingSource
            produto.DataSource = ds
            produto.DataMember = "prod"
            Dim descricao As String = produto.Current("xProd").ToString()
            Dim quantidade As String = produto.Current("cProd").ToString()
            Dim valorprod As String = produto.Current("vProd").ToString()

    quem puder me ajudar irei ficar muito grato !

    quarta-feira, 13 de março de 2019 14:56

Todas as Respostas

  • Olá, boa tarde.

    Veja se o link abaixo pode ajudar a solucionar:

    http://www.macoratti.net/10/08/vbn_xml1.htm

    Abs

    quinta-feira, 14 de março de 2019 16:57
  •  Dim objXml As New XmlDocument
            Dim oNoLista As XmlNodeList
            Dim dtsNFe As New DataSet
      Dim objXml As New XmlDocument
      Dim oNoLista As XmlNodeList
      Dim dtsNFe As New DataSet
      objXml.Load(v_strPathXml)
      Dim ns As XmlNamespaceManager = New XmlNamespaceManager(objXml.NameTable)
      ns.AddNamespace("ns", "http://www.portalfiscal.inf.br/nfe")
       Dim strPatch As String="/ns:NFe/ns:infNFe/ns:det[@nItem="
        dtsNFe.ReadXml(v_strPathXml)
    
    	For i As Integer = 1 To dtsNFe.Tables("det").Rows.Count
    	  oNoLista = Nothing
          oNoLista = objXml.SelectNodes(strPatch & i & "]/ns:prod", ns)
    	   For Each oNo As XmlNode In oNoLista
    	    For j As Integer = 0 To oNo.ChildNodes.Count - 1
    		 Select Case oNo.ChildNodes(j).Name
    			 Case "cProd"
                       campo.cProd = oNo.ChildNodes(j).InnerText
    			 Case n...
    		 End Select
    		next
    	   next
    	next
    Boa tarde.

    Isso te ajuda.
    abs.


    Marcio Oliveira

    quinta-feira, 14 de março de 2019 18:42
  •  Dim objXml As New XmlDocument
            Dim oNoLista As XmlNodeList
            Dim dtsNFe As New DataSet
      Dim objXml As New XmlDocument
      Dim oNoLista As XmlNodeList
      Dim dtsNFe As New DataSet
      objXml.Load(v_strPathXml)
      Dim ns As XmlNamespaceManager = New XmlNamespaceManager(objXml.NameTable)
      ns.AddNamespace("ns", "http://www.portalfiscal.inf.br/nfe")
       Dim strPatch As String="/ns:NFe/ns:infNFe/ns:det[@nItem="
        dtsNFe.ReadXml(v_strPathXml)
    
    	For i As Integer = 1 To dtsNFe.Tables("det").Rows.Count
    	  oNoLista = Nothing
          oNoLista = objXml.SelectNodes(strPatch & i & "]/ns:prod", ns)
    	   For Each oNo As XmlNode In oNoLista
    	    For j As Integer = 0 To oNo.ChildNodes.Count - 1
    		 Select Case oNo.ChildNodes(j).Name
    			 Case "cProd"
                       campo.cProd = oNo.ChildNodes(j).InnerText
    			 Case n...
    		 End Select
    		next
    	   next
    	next
    Boa tarde.

    Isso te ajuda.
    abs.


    Marcio Oliveira

    Olá.. eu penso que as duas respostas "podem" ajudar a solucionar a dúvida, mas de qq forma, obrigado pela confiança !    O código fonte para leitura das tags XML está muito bom !   Valeu
    quinta-feira, 14 de março de 2019 18:56
  •  Dim objXml As New XmlDocument
            Dim oNoLista As XmlNodeList
            Dim dtsNFe As New DataSet
      Dim objXml As New XmlDocument
      Dim oNoLista As XmlNodeList
      Dim dtsNFe As New DataSet
      objXml.Load(v_strPathXml)
      Dim ns As XmlNamespaceManager = New XmlNamespaceManager(objXml.NameTable)
      ns.AddNamespace("ns", "http://www.portalfiscal.inf.br/nfe")
       Dim strPatch As String="/ns:NFe/ns:infNFe/ns:det[@nItem="
        dtsNFe.ReadXml(v_strPathXml)
    
    	For i As Integer = 1 To dtsNFe.Tables("det").Rows.Count
    	  oNoLista = Nothing
          oNoLista = objXml.SelectNodes(strPatch & i & "]/ns:prod", ns)
    	   For Each oNo As XmlNode In oNoLista
    	    For j As Integer = 0 To oNo.ChildNodes.Count - 1
    		 Select Case oNo.ChildNodes(j).Name
    			 Case "cProd"
                       campo.cProd = oNo.ChildNodes(j).InnerText
    			 Case n...
    		 End Select
    		next
    	   next
    	next
    Boa tarde.

    Isso te ajuda.
    abs.


    Marcio Oliveira

    Marcio muito obrigado pela ajuda, você me ajuda imensamente, eu consegui puxar as tags que eu precisava com o seu auxilio. Não querendo abusar nem querendo ser chato eu só queria apenas mais uma ajuda se você puder, é claro.

    Após puxar as tags eu precisaria escreve-las em um .txt e mandar imprimir, esse comando eu já fiz e está funcionando. Porém não estou conseguindo escrever as tags dos produtos no .txt através desse laço de repetição. irei mostrar o meu comando que eu fiz para imprimir  

    escreve.Write("" + descricao + "    " + quantidade + " X " + valorprod + "    " + valorprod & vbNewLine & vbNewLine)

    Poderia me ajudar a como eu devo declarar as variáveis para eu poder realizar a impressão ? Segue abaixo o comando do laço no meu código.

      Dim objXml As New XmlDocument
            Dim oNoLista As XmlNodeList
            Dim dtsNFe As New DataSet
            objXml.Load(arquivoxml)
            Dim ns As XmlNamespaceManager = New XmlNamespaceManager(objXml.NameTable)
            ns.AddNamespace("ns", "http://www.portalfiscal.inf.br/nfe")
            Dim strPatch As String = "/ns:NFe/ns:infNFe/ns:det[@nItem="
            dtsNFe.ReadXml(arquivoxml)

            For i As Integer = 1 To dtsNFe.Tables("det").Rows.Count
                oNoLista = Nothing
                oNoLista = objXml.SelectNodes(strPatch & i & "]/ns:prod", ns)
                For Each oNo As XmlNode In oNoLista
                    For j As Integer = 0 To oNo.ChildNodes.Count - 1
                        Select Case oNo.ChildNodes(j).Name
                            Case "xProd"
                                Dim lista = campo.xProd = oNo.ChildNodes(j).InnerText
                            Case "qCom"
                                campo.qCom = oNo.ChildNodes(j).InnerText
                            Case "vProd"
                                campo.vProd = oNo.ChildNodes(j).InnerText
                        End Select
                    Next
                Next
            Next

    Mas já agradeço imensamente pela a sua ajuda.

    segunda-feira, 18 de março de 2019 14:59