AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi XE4: ADOM Core oder TXmlDocument, kann Datei nicht laden
Thema durchsuchen
Ansicht
Themen-Optionen

XE4: ADOM Core oder TXmlDocument, kann Datei nicht laden

Ein Thema von hoika · begonnen am 13. Feb 2015 · letzter Beitrag vom 16. Feb 2015
 
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

XE4: ADOM Core oder TXmlDocument, kann Datei nicht laden

  Alt 13. Feb 2015, 17:48
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:
http://docwiki.embarcadero.com/CodeE...e_%28Delphi%29

Der Code aus dem folgenden Link funktioniert,
dann muss ich aber meinen Quellcode kompletten umbauen:
http://www.experts-exchange.com/Prog..._28366764.html


Hier der durch die Testerei etwas wirre Code
Delphi-Quellcode:
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.
Danke

Heiko
Heiko
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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