Inquiridor
Ler campos das tags no XML VB.Net

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 !
Todas as Respostas
-
-
Dim objXml As New XmlDocument
Dim oNoLista As XmlNodeList
Dim dtsNFe As New DataSetDim 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
-
Dim objXml As New XmlDocument
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
Dim oNoLista As XmlNodeList
Dim dtsNFe As New DataSetDim 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
-
Dim objXml As New XmlDocument
Dim oNoLista As XmlNodeList
Dim dtsNFe As New DataSetDim 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
NextMas já agradeço imensamente pela a sua ajuda.