Tentando usar os Objetos da MS para ler XML, no caso o CreateObject("MSXML2.DOMDocument.6.0"), lendo um arquivo XML de dados para informação do TCE daqui.
Sistema teste em xharbour 1.2.3:
Código: Selecionar todos
procedure Sagres_teste()
Local mArqTemp
// Cria o objeto MSXML2.DOMDocument para carregar o XML
objXml := CreateObject("MSXML2.DOMDocument.6.0")
objXml:async := .F.
objXml:validateOnParse := .F.
objXml:setProperty("SelectionNamespaces", "xmlns:esp='http://www.tce.pi.gov.br/sagres2024/xml/especificos' xmlns:aux='http://www.tce.pi.gov.br/sagres2024/xml/cadastrosAuxiliares' xmlns:gen='http://www.tce.pi.gov.br/sagres2024/xml/genericos' xmlns:tab='http://www.tce.pi.gov.br/sagres2024/xml/tabelasInternas'")
// Define os namespaces e associa os prefixos
// Carrega o arquivo XML
mArqTemp := "C:\ValidadorSagres2024\201999\importacao\1\contabil\CadastrosAuxiliares.xml"
If File(mArqTemp)
If objXml:load(mArqTemp) == .F.
MsgError("Erro ao carregar o arquivo XML.")
If objXml:parseError:errorCode != 0
myErr := objXml:parseError
msg := 'Erro ao validar temporário (XML).'
msg += CRLF + 'Verifique se a pasta existe e se o arquivo está aberto por outra aplicação.'
msg += CRLF + 'Arquivo Temp: ' + mArqTemp + CRLF
msg += CRLF + 'Messagem erro: ' + Trim(myErr:reason)
msg += CRLF + 'Line erro: ' + Str(myErr:Line)
msg += CRLF + 'Line Pos erro: ' + Str(myErr:linepos)
msg += CRLF + 'File Pos erro: ' + Str(myErr:filepos)
msg += CRLF + 'Src Text erro: ' + myErr:srcText
msg += CRLF + 'url erro: ' + myErr:url
MsgError( msg )
objXml := nil
Return .f.
Endif
Endif
Else
? 'Arquivo não encontrado'
? CurDir()
wait
Endif
oUnidades := objXml:selectNodes(".//aux:UnidadeOrcamentaria")
If oUnidades:length == 0
MsgError("Nenhuma 'UnidadeOrcamentaria' encontrada no XML.")
Return .f.
EndIf
// Loop para processar cada UnidadeOrcamentaria
FOR i := 0 TO oUnidades:length - 1
oUnidade := oUnidades:item(i)
cCodigo := oUnidade:selectSingleNode("aux:codigoUnidOrcamentaria"):text
cNome := oUnidade:selectSingleNode("aux:nomeUnidOrcamentaria"):text
cTipo := oUnidade:selectSingleNode("aux:tipoUnidOrcamentaria"):text
// Exibe ou insere os dados na tabela
? "Unidade Orçamentária:"
? "Código: ", cCodigo
? "Nome: ", cNome
? "Tipo: ", cTipo
// Aqui você pode adicionar código para inserir esses dados na tabela, por exemplo:
// DBAppend() // ou insira na tabela conforme sua necessidade
NEXT
wait
// Pega a lista de elementos "Acao"
oAcoes := objXml:selectNodes("//aux:Acao")
// Loop para processar cada Acao
FOR i := 0 TO oAcoes:length - 1
oAcao := oAcoes:item(i)
cCodigoAcao := oAcao:selectSingleNode("aux:codigoAcao"):text
cDenominacao := oAcao:selectSingleNode("aux:denominacaoAcao"):text
cTipoAcao := oAcao:selectSingleNode("aux:tipoAcao"):text
// Exibe ou insere os dados na tabela
? "Ação:"
? "Código da Ação: ", cCodigoAcao
? "Denominação: ", cDenominacao
? "Tipo: ", cTipoAcao
// Aqui você pode adicionar código para inserir esses dados na tabela
NEXT
// Libera o objeto XML
objXml := NIL
wait
Return
Código: Selecionar todos
<?xml version="1.0" encoding="utf-8"?>
<!--Arquivo XML para o SAGRES 2024 -->
<!--SIMPLES - Informatica e Consultoria Ltda -->
<!--www.simplesinformatica.com (86) 3223-0653 -->
<!--Sistema: SCP21H-Sistema de Contabilidade Publica -->
<!--Data do Sistema..: 11/11/2024 - -->
<!--Versao do Sistema: 21.35.04 -->
<!--Versao do DB.....: 21.125 -->
<!--Pasta de Dados...: C:\SimplesInfo\Scp21H\DB2024\A2024_CMJF_CM_JOSE_DE_FREITAS\ -->
<!--XML Criado em....: 11/11/2024, 12:32:47 -->
<!--CNPJ Autorizado..: 07.689.847/0001-74 -->
<!--Emp. Autorizada..: CAMARA MUNICIPAL DE JOSE DE FREITAS -->
<!--Contador respons.: UBIRAJARA RODRIGUES SEPULVEDA -->
<!--Usuario Sistema..: CLODOALDO MONTEIRO & CONSULTORIA -->
<!--IP da maquina....: 10.211.55.8 -->
<!--Nome Maquina Rede: CLODOALDOSM9F4E -->
<!--Usuario Windows..: clodoaldosm -->
<aux:CadastrosAuxiliares xmlns:esp="http://www.tce.pi.gov.br/sagres2024/xml/especificos" xmlns:aux="http://www.tce.pi.gov.br/sagres2024/xml/cadastrosAuxiliares" xmlns:gen="http://www.tce.pi.gov.br/sagres2024/xml/genericos" xmlns:tab="http://www.tce.pi.gov.br/sagres2024/xml/tabelasInternas">
<!--PRESTACAO DE CONTAS =================================================================-->
<aux:PrestacaoContas>
<aux:codigoUnidGestora>201999</aux:codigoUnidGestora>
<aux:nomeUnidGestora>CAMARA MUNICIPAL DE JOSE DE FREITAS</aux:nomeUnidGestora>
<aux:cpfContador>00000000000</aux:cpfContador>
<aux:cpfGestor>00000000000</aux:cpfGestor>
<aux:anoReferencia>2024</aux:anoReferencia>
<aux:mesReferencia>01</aux:mesReferencia>
<aux:versaoXml>1</aux:versaoXml>
<aux:diaInicPresContas>01</aux:diaInicPresContas>
<aux:diaFinaPresContas>31</aux:diaFinaPresContas>
</aux:PrestacaoContas>
<!--ORCAMENTO ===========================================================================-->
<aux:Orcamento>
<aux:anoVigeLoa>2024</aux:anoVigeLoa>
<aux:dataPublLoa>2023-12-18</aux:dataPublLoa>
<aux:percentualAutoSuplLoa>0.00</aux:percentualAutoSuplLoa>
<aux:numeroLoa>001468</aux:numeroLoa>
<aux:dataPublLdo>2023-09-14</aux:dataPublLdo>
<aux:numeroLdo>
<gen:numero>001458</gen:numero>
<gen:ano>2023</gen:ano>
</aux:numeroLdo>
<aux:numeroLeiPpa>
<gen:numero>001399</gen:numero>
<gen:ano>2021</gen:ano>
</aux:numeroLeiPpa>
<aux:dataPublPpa>2021-11-30</aux:dataPublPpa>
<aux:valorRecePrevista>0.00</aux:valorRecePrevista>
<aux:valorDespFixada>4126000.00</aux:valorDespFixada>
</aux:Orcamento>
<!--UNIDADE ORCAMENTARIA ================================================================-->
<aux:UnidadeOrcamentaria> <!--0002-->
<aux:codigoUnidOrcamentaria>010100</aux:codigoUnidOrcamentaria>
<aux:nomeUnidOrcamentaria>CAMARA MUNICIPAL</aux:nomeUnidOrcamentaria>
<aux:tipoUnidOrcamentaria>1</aux:tipoUnidOrcamentaria>
</aux:UnidadeOrcamentaria>
<aux:UnidadeOrcamentaria> <!--0002-->
<aux:codigoUnidOrcamentaria>021300</aux:codigoUnidOrcamentaria>
<aux:nomeUnidOrcamentaria>SECRETARIA DE ADM. FINANCAS E RECURSOS HUMANOS</aux:nomeUnidOrcamentaria>
<aux:tipoUnidOrcamentaria>6</aux:tipoUnidOrcamentaria>
</aux:UnidadeOrcamentaria>
<!--PROGRAMAS DE GOVERNO ================================================================-->
<aux:Programa>
<aux:codigoPrograma>0001</aux:codigoPrograma>
<aux:denominacaoPrograma>AÇAO LEGISLATIVA</aux:denominacaoPrograma>
<aux:descricaoObjePrograma>OBJETIVO DO PROGRAMA: DESENVOLVER ACOES DENTRO DAS ESPECIFICACOES DO PROGRAMA</aux:descricaoObjePrograma>
<aux:valorPrevDespCorrPpa>3626000.00</aux:valorPrevDespCorrPpa>
<aux:valorPrevDespCapiPpa>500000.00</aux:valorPrevDespCapiPpa>
<aux:tipoPrograma>1</aux:tipoPrograma>
<aux:numeroLeiCriaAltePpa>
<gen:numero>001399</gen:numero>
<gen:ano>2021</gen:ano>
</aux:numeroLeiCriaAltePpa>
</aux:Programa>
<!--ACAO ================================================================================-->
<aux:Acao>
<aux:codigoAcao>1002</aux:codigoAcao>
<aux:denominacaoAcao>Aquisição de Equipamentos Para Camara</aux:denominacaoAcao>
<aux:tipoAcao>1</aux:tipoAcao>
</aux:Acao>
<aux:Acao>
<aux:codigoAcao>1003</aux:codigoAcao>
<aux:denominacaoAcao>Construção Predio Camara - Prosseguimento</aux:denominacaoAcao>
<aux:tipoAcao>1</aux:tipoAcao>
</aux:Acao>
<aux:Acao>
<aux:codigoAcao>1004</aux:codigoAcao>
<aux:denominacaoAcao>Restauração Predio antigo Camara</aux:denominacaoAcao>
<aux:tipoAcao>1</aux:tipoAcao>
</aux:Acao>
<aux:Acao>
<aux:codigoAcao>2001</aux:codigoAcao>
<aux:denominacaoAcao>Encargos c/Vereadores</aux:denominacaoAcao>
<aux:tipoAcao>2</aux:tipoAcao>
</aux:Acao>
<aux:Acao>
<aux:codigoAcao>2003</aux:codigoAcao>
<aux:denominacaoAcao>Manutenção Administrativa da Camara</aux:denominacaoAcao>
<aux:tipoAcao>2</aux:tipoAcao>
</aux:Acao>
<aux:Acao>
<aux:codigoAcao>2004</aux:codigoAcao>
<aux:denominacaoAcao>Encargos com Gabinete de vereadores</aux:denominacaoAcao>
<aux:tipoAcao>2</aux:tipoAcao>
</aux:Acao>
</aux:CadastrosAuxiliares>
LastKey..: 105
Erro Tipo: Error MSXML2.DOMDocument.6.0/3
Descrição: DISP_E_MEMBERNOTFOUND
Argumentos:
[ 1] = Tipo: "C" Valor: "//aux:UnidadeOrcamentaria";
Operação: SELECTNODES
Programa: C:\SimplesInfo\Scp21H\Scp21H.exe
Na função: TOLEAUTO:SELECTNODES
Na linha: 0
Sei que o Nodes estão todos precedidos por aux:, devido ao Schema a que eles pertence, mas não sei como fazer com que o método possa lê-los.
Desde já agradeço a ajuda.

