![]() |
|||
| HSG |
|
Achtung: Die Inhalte dieser Seite sind experimentell!
Zitat auf der openxml Seite:
Open XML is a collection of XML and Unicode tools and components for the Delphi/Kylix™ programming language. All packages are freely available including source code.
Die benötigten Klassen findet man in utils_2_0.zip und in xdom4_1.zip. Nach dem Auspacken entstehen die Verzeichnisse Utilities und Xdom_4_1. Wie weiter unten angeführt empfiehlt es sich, die Units aus Utilities und die Unit Xdom_4_1.pas aus Xdom_4_1 in das Projekt einzufügen.
Ziel ist es, zunächst ein möglichst einfaches Programm anzugeben, das einen Zugriff auf Knoten eine DOM-Baumes erlaubt.
program Parse1;
uses
Forms,
uParse1 in 'uParse1.pas' {Form1},
Xdom_4_1 in '..\..\Xdom_4_1\Xdom_4_1.pas',
XmlRulesUtils in '..\..\Utilities\XmlRulesUtils.pas',
AutoListUtils in '..\..\Utilities\AutoListUtils.pas',
AutoStrCtrls in '..\..\Utilities\AutoStrCtrls.pas',
cUnicodeCodecs in '..\..\Utilities\cUnicodeCodecs.pas',
LangUtils in '..\..\Utilities\LangUtils.pas',
MiscUtils in '..\..\Utilities\MiscUtils.pas',
ParserUtils in '..\..\Utilities\ParserUtils.pas',
TreeUtils in '..\..\Utilities\TreeUtils.pas',
UnicodeUtils in '..\..\Utilities\UnicodeUtils.pas',
UriUtils in '..\..\Utilities\UriUtils.pas',
WideStringUtils in '..\..\Utilities\WideStringUtils.pas',
AbnfUtils in '..\..\Utilities\AbnfUtils.pas';
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit uParse1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Xdom_4_1, StdCtrls;
type
TForm1 = class(TForm)
bLese: TButton;
mAusgabe: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure bLeseClick(Sender: TObject);
private
dom : TDomImplementation;
par : TXmlToDomParser;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
// ein DomImplementation-Objekt wird in jedem Fall gebraucht, AOwner wird hier auf nil gesetzt
dom := TDomImplementation.Create(nil);
// ein Parserobjekt wird erzeugt
par := TXmlToDomParser.Create(nil);
// das Parserobjekt lernt das Implementationobjekt kennen
par.DOMImpl := dom;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// wer selbst erzeugt, muss auch selbst vernichten
par.Free;
dom.Free;
end;
procedure TForm1.bLeseClick(Sender: TObject);
var
node : TDomNode; // node ist nur ein Zeiger
begin
// ein DOM-Baum wird erzeugt und node zeigt auf die Wurzel
node := par.ParseFile('grammar.xml',false);
mAusgabe.Lines.Add(node.NodeName);
// Zeiger wird weitergerĂĽckt
node := node.FindFirstChildElement;
// Achtung: FindFirstChildElement <> FirstChild
mAusgabe.Lines.Add(node.NodeName);
node := node.FindFirstChildElement;
mAusgabe.Lines.Add(node.NodeName);
node := node.FindNextSiblingElement;
mAusgabe.Lines.Add(node.NodeName);
node := node.FindFirstChildElement;
mAusgabe.Lines.Add(node.NodeName);
// statt ĂĽber einen Text-Knoten kommt man auch so an den Inhalt
mAusgabe.Lines.Add(node.TextContent);
end;
end.
Ein altes Craig Murphy-Beispiel mit xdom_4_1

unit uDOMtree;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XDOM_4_1, StdCtrls;
type
TForm1 = class(TForm)
bBaueauf: TButton;
mAusgabe: TMemo;
procedure bBaueaufClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
dom : TDomImplementation;
par : TDomToXmlParser;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.bBaueaufClick(Sender: TObject);
var
doc : TDomDocument;
element, element1 : TDomElement;
textnode : TDomText;
hs : string;
begin
// erzeuge einen Wurzelknoten
doc := TDomDocument.Create(dom);
// erzeuge ein Element <richplum> im Baum 'doc'
element := TDomElement.Create(doc,'richplum');
// fĂĽge das Attribut display="true" dem document element hinzu
element.SetAttribute('display','true');
// hänge das Element an die Wurzel
doc.AppendChild(element);
// erzeuge ein Element <message>
element1 := TDomElement.Create(doc,'message');
// erzeuge einen Text-Knoten
textnode := TDomText.Create(doc);
// fĂĽlle den Textknoten mit Daten
textnode.AppendData('hello, world');
// hänge den Textknoten an das <message>-Element
element1.AppendChild(textnode);
// hänge das <message>-Element an das <richplum>-Element
element.AppendChild(element1);
// erzeuge aus dem Baum einen "XML-String"
par.writeToString(doc,'',hs);
// weise den String der Ausgabe zu
mAusgabe.Lines.Text := hs;
// lösche den document-Baum
doc.clear;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
dom := TDomImplementation.create(nil);
par := TDomToXmlParser.create(nil);
par.DOMImpl := dom;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
par.Free;
dom.Free;
end;
end.
experimentell!