![]() |
XML und "Class Helper"
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
einige von Euch mögen sich vielleicht noch an diesen Beitrag erinnern: ![]() Mit Delphi 8 for .NET hat uns Borland die Möglichkeit gegeben sogenannte class helper zu programmieren. Es ist nicht exakt das gleiche, wie die Klassenhierarchie zu ändern, allerdings, behaupte ich mal, um weites einfacher und mächtiger. Mit class helpern kann man bestehende Klassen und Objekte anderer Assemblies, zu denen man den Source Code nicht besitzt, einfach erweitern und neue Funktionen hizufügen. Chakotay hatte mal eine Frage zum Thema XML Attribute und machte es mir recht einfach, da ich eine meiner ![]() Dazu zeige ihc als erstes erst einmal die Deklaration eines solchen class helper
Delphi-Quellcode:
Hier wird auch schon der Unterschied zu einer "normalen" Klasse deutlich. TXmlNodeHelper = class helper for XmlNode Unsere "Klasse" TXmlNodeHelper ist definiert als eine Erweiterung der Klasse XmlNode, welche im Assembly System.Xml definiert ist.
uses
System.Xml; type TXmlNodeHelper = class helper for XmlNode public function GetAttributeValue(AttributeName, DefaultValue: String; ReturnDefaultOnEmpty: Boolean = True): String; function SetAttributeValue(AttributeName, Value: String): Boolean; end; Anschließend muss man nur noch den Code einfügen, als würde man mit einer normalen Klasse arbeiten. Hier mal das Beispiel für SetAttributeValue.
Delphi-Quellcode:
Jetzt sind wir schon fertig mit den Vorbereitungen. Um diesen class helper zu nutzen, müssen wir unsere Unit nur in die Uses-Klausel der Units aufnehmen, wo wir diesen auch brauchen. Einfacher gehts nicht :stupid:
function TXmlNodeHelper.SetAttributeValue(AttributeName,
Value: String): Boolean; var Attribute: XmlNode; begin if Self = nil then begin Result := False; Exit; end else begin Attribute := Attributes.GetNamedItem(AttributeName); if Attribute <> nil then begin Attribute.Value := Value; end else begin Attribute := OwnerDocument.CreateNode(XmlNodeType.Attribute, AttributeName, ''); Attribute.Value := Value; Attributes.SetNamedItem(Attribute); end; Result := True; end; end; Hier mal ein Beispiel:
Delphi-Quellcode:
In diesem Stück Code füllen wir in der Xml-Node FTestNode das Attribute three mit den Wert *wuppdi*. Was auffällt ist, daß FTestNode vom Microsoft Typ System.Xml.XmlNode ist, dieser definiert allerdings nicht die Methode SetAttributeValue, diese haben wir mit Hilfe des class helper selbst definiert und können sie nutzen als wäre diese im Original verfügbar. :cyclops:
uses
..., System.Xml, uXmlHelper; type TWinForm = class(System.Windows.Forms.Form) ... private FTestNode: System.Xml.XmlNode; ... end; procedure TWinForm.btnSetThree_Click(sender: System.Object; e: System.EventArgs); begin MessageBox.Show('Value was set: ' + System.Convert.ToString( FTestNode.SetAttributeValue('three', '*wuppdi*'))); end; Der Rest des Codes ist im Anhang. Zum Testen muss natürlich das MS .NET Framework v1.1 installiert sein, ausserdem muss die Datei sample.xml im gleichen Verzeichnis liegen. Hier deren Inhalt.
XML-Code:
Viel Spaß mit den class helpern.
<root>
<sample one="" two="has a value"/> </root> ...:cat:... P.S.: class helper scheinen wohl sprach-spezifisch zu sein :-) [edit=Chakotay1308]Klassifiziert und Titel korrigiert. Mfg, Chakotay1308[/edit] |
Re: [.NET] XML und "Class Helper"
Hallo sakura,
als ich vor einiger Zeit ![]() Kannst Du etwas darüber sagen, ob ich Helper Classes in Assemblies veröffentlichen und aus anderen .net-Sprachen verwenden kann? |
Re: [.NET] XML und "Class Helper"
Zitat:
Zitat:
...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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