![]() |
XE4: ADOM Core oder TXmlDocument, kann Datei nicht laden
Hallo,
ich versuche, entweder per ADOM CORE oder TXmlDocument die angehängte XML-Datei zu laden. eigentlich ist das doch eine simple Datei? Mit der alten 2009-er ADOM unter D2007 klappt das ohne Problem. Weiss jemand, warum das nicht geht? Ich habe folgende Links benutzt: ![]() Der Code aus dem folgenden Link funktioniert, dann muss ich aber meinen Quellcode kompletten umbauen: ![]() Hier der durch die Testerei etwas wirre Code ;)
Delphi-Quellcode:
Danke
unit XML_LesenTest;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm54 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form54: TForm54; implementation {$R *.dfm} uses ComObj, XMLIntf, XMLDoc, MsXml; (* const CAttrName = 'attrName'; HTAB = #9; var LDocument: IXMLDocument; LNodeElement, LNode: IXMLNode; LAttrValue: string; I: Integer; begin LDocument := TXMLDocument.Create(nil); LDocument.LoadFromFile(SrcPath); { File should exist. } { Find a specific node. } LNodeElement := LDocument.ChildNodes.FindNode('ThisIsTheDocumentElement'); if (LNodeElement <> nil) then begin { Get a specific attribute. } Writeln('Getting attribute...'); if (LNodeElement.HasAttribute(CAttrName)) then begin LAttrValue := LNodeElement.Attributes[CAttrName]; Writeln('Attribute value: ' + LAttrValue); end; { Traverse child nodes. } Writeln(sLineBreak, 'Traversing child nodes...' + sLineBreak); for I := 0 to LNodeElement.ChildNodes.Count - 1 do begin LNode := LNodeElement.ChildNodes.Get(I); { Display node name. } Writeln(sLineBreak + 'Node name: ' + LNode.NodeName); { Check whether the node type is Text. } if LNode.NodeType = ntText then begin Writeln(HTAB + 'This is a node of type Text. The text is: ' + LNode.Text); end; { Check whether the node is text element. } if LNode.IsTextElement then begin Writeln(HTAB + 'This is a text element. The text is: ' + LNode.Text); end; end; end; end; *) procedure CreateDocument; var LDocument: IXMLDocument; LNodeElement, NodeCData, NodeText: IXMLNode; begin LDocument := TXMLDocument.Create(nil); LDocument.Active := True; { Define document content. } LDocument.DocumentElement := LDocument.CreateNode('ThisIsTheDocumentElement', ntElement, ''); LDocument.DocumentElement.Attributes['attrName'] := 'attrValue'; LNodeElement := LDocument.DocumentElement.AddChild('ThisElementHasText', -1); LNodeElement.Text := 'Inner text.'; NodeCData := LDocument.CreateNode('any characters here', ntCData, ''); LDocument.DocumentElement.ChildNodes.Add(NodeCData); NodeText := LDocument.CreateNode('This is a text node.', ntText, ''); LDocument.DocumentElement.ChildNodes.Add(NodeText); LDocument.SaveToFile('C:\ProjektA_TestDB\ICD10\1.xml'); end; procedure TForm54.Button1Click(Sender: TObject); begin CreateDocument; end; (* const CAttrName = 'attrName'; HTAB = #9; var LDocument: IXMLDocument; LNodeElement, LNode: IXMLNode; LAttrValue: string; I: Integer; url: String; begin // put url or file name url := 'C:\ProjektA_TestDB\ICD10\1.xml'; //url := 'C:\ProjektA_TestDB\ICD10\2.xml'; if not FileExists(url) then begin raise Exception.Create('XML file not found'); end; LDocument := TXMLDocument.Create(nil); LDocument.LoadFromFile(url); { File should exist. } { Find a specific node. } LNodeElement := LDocument.ChildNodes.FindNode('kapitel_liste'); if (LNodeElement <> nil) then begin { Get a specific attribute. } Writeln('Getting attribute...'); if (LNodeElement.HasAttribute(CAttrName)) then begin LAttrValue := LNodeElement.Attributes[CAttrName]; Writeln('Attribute value: ' + LAttrValue); end; { Traverse child nodes. } Writeln(sLineBreak, 'Traversing child nodes...' + sLineBreak); for I := 0 to LNodeElement.ChildNodes.Count - 1 do begin LNode := LNodeElement.ChildNodes.Get(I); { Display node name. } Writeln(sLineBreak + 'Node name: ' + LNode.NodeName); { Check whether the node type is Text. } if LNode.NodeType = ntText then begin Writeln(HTAB + 'This is a node of type Text. The text is: ' + LNode.Text); end; { Check whether the node is text element. } if LNode.IsTextElement then begin Writeln(HTAB + 'This is a text element. The text is: ' + LNode.Text); end; end; end; end; *) procedure RetrieveDocument; const CAttrName = 'attrName'; HTAB = #9; var LDocument: IXMLDocument; LNodeElement, LNode: IXMLNode; LAttrValue: string; I: Integer; begin LDocument := TXMLDocument.Create(nil); LDocument.LoadFromFile('C:\ProjektA_TestDB\ICD10\1.xml'); { File should exist. } { Find a specific node. } LNodeElement := LDocument.ChildNodes.FindNode('BoolsAsChecks'); if (LNodeElement <> nil) then begin { Get a specific attribute. } Writeln('Getting attribute...'); if (LNodeElement.HasAttribute(CAttrName)) then begin LAttrValue := LNodeElement.Attributes[CAttrName]; Writeln('Attribute value: ' + LAttrValue); end; { Traverse child nodes. } Writeln(sLineBreak, 'Traversing child nodes...' + sLineBreak); for I := 0 to LNodeElement.ChildNodes.Count - 1 do begin LNode := LNodeElement.ChildNodes.Get(I); { Display node name. } Writeln(sLineBreak + 'Node name: ' + LNode.NodeName); { Check whether the node type is Text. } if LNode.NodeType = ntText then begin Writeln(HTAB + 'This is a node of type Text. The text is: ' + LNode.Text); end; { Check whether the node is text element. } if LNode.IsTextElement then begin Writeln(HTAB + 'This is a text element. The text is: ' + LNode.Text); end; end; end; end; procedure TForm54.Button2Click(Sender: TObject); begin RetrieveDocument; end; procedure TForm54.Button3Click(Sender: TObject); var XMLDoc: IXMLDOMDocument; begin XMLDoc := CoDOMDocument.Create; XMLDoc.load('C:\ProjektA_TestDB\ICD10\1.xml'); Memo1.Lines.Add(XMLDoc.xml); Memo1.Lines.Add(''); XMLDoc.load('C:\ProjektA_TestDB\ICD10\2.xml'); Memo1.Lines.Add(XMLDoc.xml); Memo1.Lines.Add(''); XMLDoc.load('C:\ProjektA_TestDB\ICD10\3.xml'); Memo1.Lines.Add(XMLDoc.xml); Memo1.Lines.Add(''); end; procedure TForm54.Button4Click(Sender: TObject); var xml: IXMLDOMDocument; node: IXMLDomNode; nodes_row, nodes_se: IXMLDomNodeList; nodes_kapitel: IXMLDomNodeList; i, j: Integer; url: string; begin // put url or file name url := 'C:\ProjektA_TestDB\ICD10\icd_2.1_74_tf+2015q1.xml'; // klappt nicht //xml := CreateOleObject('Microsoft.XMLDOM') as IXMLDOMDocument; xml := CoDOMDocument.Create; xml.async := False; //xml.loadXML(url); xml.load(url); if xml.parseError.errorCode <> 0 then raise Exception.Create('XML Load error:' + xml.parseError.reason); Memo1.Clear; nodes_row := xml.selectNodes('blabla'); for i := 0 to nodes_row.length - 1 do begin node := nodes_row.item[i]; //nodes_kapitel:= node.selectNodes('kapitel Memo1.Lines.Add('phrase=' + node.selectSingleNode('phrase').text); nodes_se := node.selectNodes('search_engines/search_engine/se_url'); for j := 0 to nodes_se.length - 1 do begin node := nodes_se.item[j]; Memo1.Lines.Add('url=' + node.text); end; Memo1.Lines.Add('--------------'); end;end; end. Heiko |
AW: XE4: ADOM Core oder TXmlDocument, kann Datei nicht laden
Bin ich blind oder hast du deine "C:\ProjektA_TestDB\ICD10\icd_2.1_74_tf+2015q1.xml " vergessen anzuhängen?
|
AW: XE4: ADOM Core oder TXmlDocument, kann Datei nicht laden
Hallo,
das gibt es doch nicht! Jetzt klappt das TXmlDocument (RetrieveDocument) doch ! Zumindestens lädt er das Dokument. Nur das LNodeX.ChildNodes.FindNode scheint nicht rekursiv zu suchen, sondern wirklich nur auf der aktuellen Child-Ebene. Aber das ist egal. Heiko |
AW: XE4: ADOM Core oder TXmlDocument, kann Datei nicht laden
Hallo Günther,
irgendwie hat das mit dem Anhängen nicht geklappt. Aber das es jetzt geht, ist es eh egal. (Das sind Daten der KBV/DIMDI, ich weiss gar nicht, ob ich die einfach so hochladen darf ...). Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz