Olá...
Quintas, por favor dá mais uma aulinha aqui... tem horas que a gente tá meio travado... (ou é burro mesmo)...
Eu tinha conseguido fazer funcionar com MultipleNodeToArray(), tive que fazer uma alteração na função mas funcionou... Que alteração? Quando manda somente o cNode para MultipleNodeToArray() lendo uma nfe não funcionava por que o bloco de itens começa com det item e termina somente com det. Daí implementei para mandar cNode e cNodeFim, se não for enviado cNodeFim ele assume por default cNode.
Daí ficou assim:
Código: Selecionar todos
FUNCTION MultipleNodeToArray( cXml, cNode, cNodeFim )
LOCAL aNodes :={}
hb_Default( @cNodeFim, cNode )
DO WHILE "<" + cNode + "=" $ cXml .OR. "<" + cNode + ">" $ cXml
Aadd( aNodes , XmlNode( cXml , cNode ) )
IF ! "</" + cNodeFim $ cXml
cXml := ""
ELSE
cXml := Substr( cXml, At( "</" + cNodeFim + ">", cXml ) + Len( "</" + cNodeFim + ">" ) )
ENDIF
ENDDO
RETURN aNodes
Agora não estou conseguindo chamar a função... Se uso:
Funciona beleza... desde que a ordem dos produtos esteja correta...
Se a ordem dos produtos está errada, não está em sequencia ( 1,2,3,4,9,6,57 ) não funciona.
Como eu colocaria para usar o MultipleNodeToArray().
Já tinha conseguido isso mas perdi uns dois dias de programação e a rotina que tinha conseguido estava nesses dias.
O meu conceito é:
Preciso pegar a relação dos produtos... daí envio para MultipleNodeToArray() cXML que é o texto da NFE certo? daí MultipleNodeToArray() adiciona em aNodes os produtos. Mas eu não tenho um variável texto com a NFE. oNFE é um objeto de class e oNFE:Produto é uma array.
O mais próximo que consegui chegar foi:
Código: Selecionar todos
cXml := Hb_MemoRead( cArqXml )
For EACH oProduto IN ( MultipleNodeToArray( cXml, 'det nItem','det')
cNomPro := oProduto:Nome --> Dá erro aqui
Next
Obrigado
Rubens