Bom dia!!
Usei a função XmlParserFile para ler um XML e jogar dentro de uma variável, oXML, ok...
Ele monta a estrutura certinha, conforme a cadeia das TAGs, mas as vezes o XML tem determinadas TAGs e as vezes não, dai se não tem e eu mando ler, da erro.
Por exemplo, a estrutura fica:
nSeg := oXml:_NFE:_INFNFE:_DET:_PROD:_VSEG:TEXT
Mas se dentro do PROD não existir a tag VSEG, ele da erro.
Existe uma forma de eu consultar antes se nessa "cadeia" do oXML vai ter o VSEG ou não? Dai se tiver eu jogo na variável, se não passo um 0 por exemplo.
Não encontrei nada....
Obrigado!!
Guilherme,
Você pode usar a função AttIsMemberOf
para verificar se o objeto do XML tem ou não o valor.
Abaixo um exemplo do uso:
//------------------------------------------------------------------
/*/{Protheus.doc} u_xmlProperty
Verificação de propriedades em XML
@author Daniel Mendes
@since 30/03/2022
@version 1.0
/*/
//-------------------------------------------------------------------
function u_xmlProperty()
local cXml as character
local oXml as object
local cWarning as character
local cError as character
begincontent var cXml
<?xml version="1.0" encoding="ISO-8859-1"?>
<pedido>
<Nome_Cliente>Microsiga Software</Nome_Cliente>
<Endereco>Av. Braz Leme</Endereco>
<Numero>1361</Numero>
<Data>22-03-2005</Data>
<Itens>
<Item>
<Produto>Protheus</Produto>
<Quantidade>1</Quantidade>
<Preco>100.00</Preco>
</Item>
</Itens>
</pedido>
endcontent
cWarning := ""
cError := ""
oXml := XmlParser(cXml, "_", @cError, @cWarning)
if AttIsMemberOf(oXml, "_pedido") .and. AttIsMemberOf(oXml:_pedido, "_numero")
conOut(oXml:_pedido:_numero:text)
endif
FreeObj(oXml)
oXml := nil
return
Documentação:
https://tdn.totvs.com.br/display/tec/XmlParser
https://tdn.totvs.com.br/display/tec/AttlsMemberOf
Perfeito!! Era isso mesmo que eu precisava. Muito obrigado!