Fórum Access Violation ao tentar lêr ficheiro Xml em Delphi 6 #445168
11/06/2013
0
Quando tento obter o valor de um nó com o comando 'findnode' dá um erro de ACCESS VIOLATION.
Haverá alguém que me possa ajudar?
Xml file:
<?xml version="1.0" encoding="ISO-8859-1"?>
<FileProcResult xmlns="https://servicos.portaldasfinancas.gov.pt/sgdtpf/fileProcessingResult/">
<DocumentInfo>
<DocumentNumber>GC 1/201300001</DocumentNumber>
<ATDocCodeID>004719433</ATDocCodeID>
</DocumentInfo>
<DocumentInfo>
<DocumentNumber>GC 1/201300002</DocumentNumber>
<ATDocCodeID>004719441</ATDocCodeID>
</DocumentInfo>
</FileProcResult>
meu código usando TxmlDocument :
XMLDoc.LoadFromFile('C:\abcd\Ficheiro.xml');
XMLDoc.LoadFromFile('C:\abcd\Ficheiro.xml');
XMLDoc.Active := true;
with (XMLDoc) do begin
with (DocumentElement.ChildNodes) do begin
memo1.Lines.Add(FindNode('DocumentNumber').Text);
memo1.Lines.Add(FindNode('ATDocCodeID').Text);
end;
end;
Ana Santos
Curtir tópico
+ 0Posts
11/06/2013
Rodolpho Silva
...
if FindNode('DocumentNumber') <> nil then
memo1.Lines.Add(FindNode('DocumentNumber').Text);
if FindNode('ATDocCodeID') <> nil then
memo1.Lines.Add(FindNode('ATDocCodeID').Text);
...
Gostei + 0
12/06/2013
Ana Santos
Muito obrigado
Gostei + 0
12/06/2013
Ana Santos
A solução que me propôs funciona muito bem. Mas agora estou com outro problema : apenas consigo lêr o node [DocumentInfo] e o que eu necessito é de ler os filhos desse node. Pode-me ajudar?
Muito obrigado
Gostei + 0
12/06/2013
Rodolpho Silva
procedure LerDeModoRecursivo(node: IXMLNode); var iLevel: Integer; begin for iLevel := 0 to Pred(node.ChildNodes.Count) do begin // Faça alguma coisa com o nó... // node.ChildNodes[iLevel]; if node.ChildNodes[iLevel].HasChildNodes then LocReadChildNodes(node.ChildNodes[iLevel]); end; end;
E sendo a chamada principal...
LerDeModoRecursivo(XMLDocument.DocumentElement);
Desta forma, você consegue ler todos os nós do XML, independente do nível em que se encontra.
Gostei + 0
12/06/2013
Rodolpho Silva
procedure LerDeModoRecursivo(node: IXMLNode);
var
iLevel: Integer;
begin
for iLevel := 0 to Pred(node.ChildNodes.Count) do
begin
// Faça alguma coisa com o nó...
// node.ChildNodes[iLevel];
if node.ChildNodes[iLevel].HasChildNodes then
LerDeModoRecursivo(node.ChildNodes[iLevel]);
end;
end;
Gostei + 0
12/06/2013
Ana Santos
Funcionou na perfeição.
Muito, muito obrigada
Gostei + 0
27/09/2013
José
Sendo assim estou marcando o tópico como concluído, fique a vontade para abrir novos.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)