|
|
@@ -0,0 +1,602 @@ |
|
|
|
unit uutlXmlHelper; |
|
|
|
|
|
|
|
{$mode objfpc}{$H+} |
|
|
|
|
|
|
|
{ *************************** EXAMPLE ********************************* |
|
|
|
doc := TXMLDocument.Create; |
|
|
|
try |
|
|
|
root := doc.CreateElement('root'); |
|
|
|
doc.AppendChild(root); |
|
|
|
with TutlXmlHelper.Create(root) do begin |
|
|
|
SetAttribString('test', 'blubb'); |
|
|
|
SetAttribInt('new', 123); |
|
|
|
with TutlXmlHelper.Create(AppendNode('test')) do begin |
|
|
|
SetString('child node :)'); |
|
|
|
end; |
|
|
|
with TutlXmlHelper.Create(AppendNode('test')) do begin |
|
|
|
SetString('another child node :)'); |
|
|
|
end; |
|
|
|
end; |
|
|
|
WriteXMLFile(doc, 'save.xml'); |
|
|
|
finally |
|
|
|
FreeAndNil(doc); |
|
|
|
end; } |
|
|
|
|
|
|
|
interface |
|
|
|
|
|
|
|
uses |
|
|
|
Classes, SysUtils, DOM; |
|
|
|
|
|
|
|
type |
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
IutlNodeEnumerator = interface(specialize IEnumerator<TDOMElement>) |
|
|
|
['{59F90C67-8A0B-48AC-8A49-D39317A07FE2}'] |
|
|
|
function GetEnumerator: IutlNodeEnumerator; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
IutlXmlHelper = interface(IUnknown) |
|
|
|
['{C489CEC8-BAD6-4E03-A554-9DF31E84CDBB}'] |
|
|
|
|
|
|
|
// simple properties |
|
|
|
function GetElement: TDOMElement; |
|
|
|
|
|
|
|
property Node: TDOMElement read GetElement; |
|
|
|
|
|
|
|
// set value of current node |
|
|
|
procedure SetString (const aValue: String); overload; |
|
|
|
procedure SetString (const aValue: WideString); overload; |
|
|
|
procedure SetString (const aValue: UnicodeString); overload; |
|
|
|
procedure SetInt (const aValue: Integer); |
|
|
|
procedure SetFloat (const aValue: Double); |
|
|
|
procedure SetBool (const aValue: Boolean); |
|
|
|
|
|
|
|
// get value of current node |
|
|
|
function GetString (const aDefault: String): String; |
|
|
|
function GetStringW (const aDefault: WideString): WideString; |
|
|
|
function GetStringU (const aDefault: UnicodeString): UnicodeString; |
|
|
|
function GetInt (const aDefault: Int64): Int64; |
|
|
|
function GetFloat (const aDefault: Double): Double; |
|
|
|
function GetBool (const aDefault: Boolean): Boolean; |
|
|
|
|
|
|
|
// set value of attribute |
|
|
|
procedure SetAttribString (const aName: DOMString; const aValue: String); overload; |
|
|
|
procedure SetAttribString (const aName: DOMString; const aValue: WideString); overload; |
|
|
|
procedure SetAttribString (const aName: DOMString; const aValue: UnicodeString); overload; |
|
|
|
procedure SetAttribInt (const aName: DOMString; const aValue: Integer); |
|
|
|
procedure SetAttribFloat (const aName: DOMString; const aValue: Double); |
|
|
|
procedure SetAttribBool (const aName: DOMString; const aValue: Boolean); |
|
|
|
|
|
|
|
// get value of attribute |
|
|
|
function GetAttribString (const aName: DOMString; const aDefault: String): String; |
|
|
|
function GetAttribStringW (const aName: DOMString; const aDefault: WideString): WideString; |
|
|
|
function GetAttribStringU (const aName: DOMString; const aDefault: UnicodeString): UnicodeString; |
|
|
|
function GetAttribInt (const aName: DOMString; const aDefault: Int64): Int64; |
|
|
|
function GetAttribFloat (const aName: DOMString; const aDefault: Double): Double; |
|
|
|
function GetAttribBool (const aName: DOMString; const aDefault: Boolean): Boolean; |
|
|
|
|
|
|
|
// node operations |
|
|
|
function Nodes (const aName: DOMString): IutlNodeEnumerator; |
|
|
|
function PrependNode (const aName: DOMString): TDOMElement; |
|
|
|
function AppendNode (const aName: DOMString): TDOMElement; |
|
|
|
procedure PrependText (const aText: DOMString); |
|
|
|
procedure AppendText (const aText: DOMString); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
TutlNodeEnumerator = class(TInterfacedObject, IutlNodeEnumerator) |
|
|
|
private |
|
|
|
fIndex: Integer; |
|
|
|
fName: DOMString; |
|
|
|
fParent: TDOMElement; |
|
|
|
|
|
|
|
public { INodeEnumerator } |
|
|
|
function GetEnumerator: IutlNodeEnumerator; |
|
|
|
function GetCurrent: TDOMElement; |
|
|
|
function MoveNext: Boolean; |
|
|
|
procedure Reset; |
|
|
|
|
|
|
|
public |
|
|
|
constructor Create(const aParent: TDOMElement; const aName: DOMString); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
TutlXmlHelper = class(TInterfacedObject, IutlXmlHelper) |
|
|
|
private |
|
|
|
fElement: TDOMElement; |
|
|
|
|
|
|
|
public { IutlXmlHelper } |
|
|
|
function GetElement: TDOMElement; |
|
|
|
|
|
|
|
// set value of current node |
|
|
|
procedure SetString (const aValue: String); overload; |
|
|
|
procedure SetString (const aValue: WideString); overload; |
|
|
|
procedure SetString (const aValue: UnicodeString); overload; |
|
|
|
procedure SetInt (const aValue: Integer); |
|
|
|
procedure SetFloat (const aValue: Double); |
|
|
|
procedure SetBool (const aValue: Boolean); |
|
|
|
|
|
|
|
// get value of current node |
|
|
|
function GetString (const aDefault: String): String; |
|
|
|
function GetStringW (const aDefault: WideString): WideString; |
|
|
|
function GetStringU (const aDefault: UnicodeString): UnicodeString; |
|
|
|
function GetInt (const aDefault: Int64): Int64; |
|
|
|
function GetFloat (const aDefault: Double): Double; |
|
|
|
function GetBool (const aDefault: Boolean): Boolean; |
|
|
|
|
|
|
|
// set value of attribute |
|
|
|
procedure SetAttribString (const aName: DOMString; const aValue: String); overload; |
|
|
|
procedure SetAttribString (const aName: DOMString; const aValue: WideString); overload; |
|
|
|
procedure SetAttribString (const aName: DOMString; const aValue: UnicodeString); overload; |
|
|
|
procedure SetAttribInt (const aName: DOMString; const aValue: Integer); |
|
|
|
procedure SetAttribFloat (const aName: DOMString; const aValue: Double); |
|
|
|
procedure SetAttribBool (const aName: DOMString; const aValue: Boolean); |
|
|
|
|
|
|
|
// get value of attribute |
|
|
|
function GetAttribString (const aName: DOMString; const aDefault: String): String; |
|
|
|
function GetAttribStringW (const aName: DOMString; const aDefault: WideString): WideString; |
|
|
|
function GetAttribStringU (const aName: DOMString; const aDefault: UnicodeString): UnicodeString; |
|
|
|
function GetAttribInt (const aName: DOMString; const aDefault: Int64): Int64; |
|
|
|
function GetAttribFloat (const aName: DOMString; const aDefault: Double): Double; |
|
|
|
function GetAttribBool (const aName: DOMString; const aDefault: Boolean): Boolean; |
|
|
|
|
|
|
|
// node operations |
|
|
|
function Nodes (const aName: DOMString): IutlNodeEnumerator; |
|
|
|
function PrependNode (const aName: DOMString): TDOMElement; |
|
|
|
function AppendNode (const aName: DOMString): TDOMElement; |
|
|
|
procedure PrependText (const aText: DOMString); |
|
|
|
procedure AppendText (const aText: DOMString); |
|
|
|
|
|
|
|
private |
|
|
|
{%H-}constructor Create; reintroduce; |
|
|
|
{%H-}constructor Create(const aElement: TDOMElement); reintroduce; |
|
|
|
|
|
|
|
public |
|
|
|
class function Create(const aElement: TDOMElement): IutlXmlHelper; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
TutlXmlHelperImpl = class |
|
|
|
public |
|
|
|
class function SetString (const aNode: TDOMNode; const aValue: String): TDOMNode; overload; |
|
|
|
class function SetString (const aNode: TDOMNode; const aValue: WideString): TDOMNode; overload; |
|
|
|
class function SetString (const aNode: TDOMNode; const aValue: UnicodeString): TDOMNode; overload; |
|
|
|
class function SetInt (const aNode: TDOMNode; const aValue: Integer): TDOMNode; |
|
|
|
class function SetFloat (const aNode: TDOMNode; const aValue: Double): TDOMNode; |
|
|
|
class function SetBool (const aNode: TDOMNode; const aValue: Boolean): TDOMNode; |
|
|
|
|
|
|
|
class function GetString (const aNode: TDOMNode; const aDefault: String): String; |
|
|
|
class function GetStringW (const aNode: TDOMNode; const aDefault: WideString): WideString; |
|
|
|
class function GetStringU (const aNode: TDOMNode; const aDefault: UnicodeString): UnicodeString; |
|
|
|
class function GetInt (const aNode: TDOMNode; const aDefault: Int64): Int64; |
|
|
|
class function GetFloat (const aNode: TDOMNode; const aDefault: Double): Double; |
|
|
|
class function GetBool (const aNode: TDOMNode; const aDefault: Boolean): Boolean; |
|
|
|
|
|
|
|
class function Nodes (const aElement: TDOMElement; const aName: DOMString = ''): IutlNodeEnumerator; |
|
|
|
class function PrependNode (const aElement: TDOMElement; const aName: DOMString): TDOMElement; |
|
|
|
class function AppendNode (const aElement: TDOMElement; const aName: DOMString): TDOMElement; |
|
|
|
class procedure PrependText (const aElement: TDOMElement; const aText: DOMString); |
|
|
|
class procedure AppendText (const aElement: TDOMElement; const aText: DOMString); |
|
|
|
end; |
|
|
|
|
|
|
|
implementation |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
//TutlNodeEnumerator///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlNodeEnumerator.GetEnumerator: IutlNodeEnumerator; |
|
|
|
begin |
|
|
|
result := self; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlNodeEnumerator.GetCurrent: TDOMElement; |
|
|
|
begin |
|
|
|
result := (fParent.ChildNodes[fIndex] as TDOMElement); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlNodeEnumerator.MoveNext: Boolean; |
|
|
|
begin |
|
|
|
repeat |
|
|
|
inc(fIndex) |
|
|
|
until (fIndex >= fParent.ChildNodes.Count) |
|
|
|
or ( (fName = '') |
|
|
|
or (fName = fParent.ChildNodes[fIndex].NodeName)); |
|
|
|
result := (fIndex < fParent.ChildNodes.Count); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlNodeEnumerator.Reset; |
|
|
|
begin |
|
|
|
fIndex := -1; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
constructor TutlNodeEnumerator.Create(const aParent: TDOMElement; const aName: DOMString); |
|
|
|
begin |
|
|
|
inherited Create; |
|
|
|
fParent := aParent; |
|
|
|
fName := aName; |
|
|
|
fIndex := -1; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
//TutlXmlHelper////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetElement: TDOMElement; |
|
|
|
begin |
|
|
|
result := fElement; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetString(const aValue: String); |
|
|
|
begin |
|
|
|
TutlXmlHelperImpl.SetString(fElement, aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetString(const aValue: WideString); |
|
|
|
begin |
|
|
|
TutlXmlHelperImpl.SetString(fElement, aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetString(const aValue: UnicodeString); |
|
|
|
begin |
|
|
|
TutlXmlHelperImpl.SetString(fElement, aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetInt(const aValue: Integer); |
|
|
|
begin |
|
|
|
TutlXmlHelperImpl.SetInt(fElement, aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetFloat(const aValue: Double); |
|
|
|
begin |
|
|
|
TutlXmlHelperImpl.SetFloat(fElement, aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetBool(const aValue: Boolean); |
|
|
|
begin |
|
|
|
TutlXmlHelperImpl.SetBool(fElement, aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetString(const aDefault: String): String; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetString(fElement, aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetStringW(const aDefault: WideString): WideString; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetStringW(fElement, aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetStringU(const aDefault: UnicodeString): UnicodeString; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetStringU(fElement, aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetInt(const aDefault: Int64): Int64; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetInt(fElement, aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetFloat(const aDefault: Double): Double; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetFloat(fElement, aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetBool(const aDefault: Boolean): Boolean; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetBool(fElement, aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: String); |
|
|
|
begin |
|
|
|
fElement.SetAttributeNode(TutlXmlHelperImpl.SetString( |
|
|
|
fElement.OwnerDocument.CreateAttribute(aName), |
|
|
|
aValue) as TDOMAttr); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: WideString); |
|
|
|
begin |
|
|
|
fElement.SetAttributeNode(TutlXmlHelperImpl.SetString( |
|
|
|
fElement.OwnerDocument.CreateAttribute(aName), |
|
|
|
aValue) as TDOMAttr); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: UnicodeString); |
|
|
|
begin |
|
|
|
fElement.SetAttributeNode(TutlXmlHelperImpl.SetString( |
|
|
|
fElement.OwnerDocument.CreateAttribute(aName), |
|
|
|
aValue) as TDOMAttr); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetAttribInt(const aName: DOMString; const aValue: Integer); |
|
|
|
begin |
|
|
|
fElement.SetAttributeNode(TutlXmlHelperImpl.SetInt( |
|
|
|
fElement.OwnerDocument.CreateAttribute(aName), |
|
|
|
aValue) as TDOMAttr); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetAttribFloat(const aName: DOMString; const aValue: Double); |
|
|
|
begin |
|
|
|
fElement.SetAttributeNode(TutlXmlHelperImpl.SetFloat( |
|
|
|
fElement.OwnerDocument.CreateAttribute(aName), |
|
|
|
aValue) as TDOMAttr); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.SetAttribBool(const aName: DOMString; const aValue: Boolean); |
|
|
|
begin |
|
|
|
fElement.SetAttributeNode(TutlXmlHelperImpl.SetBool( |
|
|
|
fElement.OwnerDocument.CreateAttribute(aName), |
|
|
|
aValue) as TDOMAttr); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetAttribString(const aName: DOMString; const aDefault: String): String; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetString(fElement.Attributes.GetNamedItem(aName), aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetAttribStringW(const aName: DOMString; const aDefault: WideString): WideString; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetStringW(fElement.Attributes.GetNamedItem(aName), aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetAttribStringU(const aName: DOMString; const aDefault: UnicodeString): UnicodeString; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetStringU(fElement.Attributes.GetNamedItem(aName), aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetAttribInt(const aName: DOMString; const aDefault: Int64): Int64; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetInt(fElement.Attributes.GetNamedItem(aName), aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetAttribFloat(const aName: DOMString; const aDefault: Double): Double; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetFloat(fElement.Attributes.GetNamedItem(aName), aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.GetAttribBool(const aName: DOMString; const aDefault: Boolean): Boolean; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.GetBool(fElement.Attributes.GetNamedItem(aName), aDefault); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.Nodes(const aName: DOMString): IutlNodeEnumerator; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.Nodes(fElement, aName); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.PrependNode(const aName: DOMString): TDOMElement; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.PrependNode(fElement, aName); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlXmlHelper.AppendNode(const aName: DOMString): TDOMElement; |
|
|
|
begin |
|
|
|
result := TutlXmlHelperImpl.AppendNode(fElement, aName); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.PrependText(const aText: DOMString); |
|
|
|
begin |
|
|
|
TutlXmlHelperImpl.PrependText(fElement, aText); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
procedure TutlXmlHelper.AppendText(const aText: DOMString); |
|
|
|
begin |
|
|
|
TutlXmlHelperImpl.AppendText(fElement, aText); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
constructor TutlXmlHelper.Create; |
|
|
|
begin |
|
|
|
inherited Create; |
|
|
|
fElement := nil; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
constructor TutlXmlHelper.Create(const aElement: TDOMElement); |
|
|
|
begin |
|
|
|
Create; |
|
|
|
fElement := aElement; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelper.Create(const aElement: TDOMElement): IutlXmlHelper; |
|
|
|
begin |
|
|
|
result := TutlXmlHelper.Create(aElement); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
//TutlXmlHelperImpl////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.SetString(const aNode: TDOMNode; const aValue: String): TDOMNode; |
|
|
|
begin |
|
|
|
result := aNode; |
|
|
|
if Assigned(aNode) then |
|
|
|
aNode.TextContent := DOMString(aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.SetString(const aNode: TDOMNode; const aValue: WideString): TDOMNode; |
|
|
|
begin |
|
|
|
result := aNode; |
|
|
|
if Assigned(aNode) then |
|
|
|
aNode.TextContent := DOMString(aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.SetString(const aNode: TDOMNode; const aValue: UnicodeString): TDOMNode; |
|
|
|
begin |
|
|
|
result := aNode; |
|
|
|
if Assigned(aNode) then |
|
|
|
aNode.TextContent := DOMString(aValue); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.SetInt(const aNode: TDOMNode; const aValue: Integer): TDOMNode; |
|
|
|
begin |
|
|
|
result := aNode; |
|
|
|
if Assigned(aNode) then |
|
|
|
aNode.TextContent := DOMString(IntToStr(aValue)); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.SetFloat(const aNode: TDOMNode; const aValue: Double): TDOMNode; |
|
|
|
begin |
|
|
|
result := aNode; |
|
|
|
if Assigned(aNode) then |
|
|
|
aNode.TextContent := DOMString(FloatToStr(aValue)); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.SetBool(const aNode: TDOMNode; const aValue: Boolean): TDOMNode; |
|
|
|
begin |
|
|
|
result := aNode; |
|
|
|
if Assigned(aNode) then begin |
|
|
|
if aValue |
|
|
|
then aNode.TextContent := 'true' |
|
|
|
else aNode.TextContent := 'false'; |
|
|
|
end; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.GetString(const aNode: TDOMNode; const aDefault: String): String; |
|
|
|
begin |
|
|
|
if not Assigned(aNode) |
|
|
|
or ( not aNode.HasChildNodes |
|
|
|
and not (aNode is TDOMText)) |
|
|
|
then result := aDefault |
|
|
|
else result := String(aNode.TextContent); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.GetStringW(const aNode: TDOMNode; const aDefault: WideString): WideString; |
|
|
|
begin |
|
|
|
if not Assigned(aNode) |
|
|
|
or ( not aNode.HasChildNodes |
|
|
|
and not (aNode is TDOMText)) |
|
|
|
then result := aDefault |
|
|
|
else result := WideString(aNode.TextContent); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.GetStringU(const aNode: TDOMNode; const aDefault: UnicodeString): UnicodeString; |
|
|
|
begin |
|
|
|
if not Assigned(aNode) |
|
|
|
or ( not aNode.HasChildNodes |
|
|
|
and not (aNode is TDOMText)) |
|
|
|
then result := aDefault |
|
|
|
else result := UnicodeString(aNode.TextContent); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.GetInt(const aNode: TDOMNode; const aDefault: Int64): Int64; |
|
|
|
begin |
|
|
|
if not Assigned(aNode) |
|
|
|
or ( not aNode.HasChildNodes |
|
|
|
and not (aNode is TDOMText)) |
|
|
|
or not TryStrToInt64(String(aNode.TextContent), result) then |
|
|
|
result := aDefault; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.GetFloat(const aNode: TDOMNode; const aDefault: Double): Double; |
|
|
|
begin |
|
|
|
if not Assigned(aNode) |
|
|
|
or ( not aNode.HasChildNodes |
|
|
|
and not (aNode is TDOMText)) |
|
|
|
or not TryStrToFloat(String(aNode.TextContent), result) then |
|
|
|
result := aDefault; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.GetBool(const aNode: TDOMNode; const aDefault: Boolean): Boolean; |
|
|
|
var |
|
|
|
s: String; |
|
|
|
begin |
|
|
|
if not Assigned(aNode) |
|
|
|
or ( not aNode.HasChildNodes |
|
|
|
and not (aNode is TDOMText)) |
|
|
|
then |
|
|
|
begin |
|
|
|
result := aDefault; |
|
|
|
exit; |
|
|
|
end; |
|
|
|
s := LowerCase(String(aNode.TextContent)); |
|
|
|
if (s = 'true') or (s = 't') or (s = '1') then |
|
|
|
result := true |
|
|
|
else if (s = 'false') or (s = 'f') or (s = '0') then |
|
|
|
result := false |
|
|
|
else |
|
|
|
result := aDefault; |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.Nodes(const aElement: TDOMElement; const aName: DOMString): IutlNodeEnumerator; |
|
|
|
begin |
|
|
|
result := TutlNodeEnumerator.Create(aElement, aName); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.PrependNode(const aElement: TDOMElement; const aName: DOMString): TDOMElement; |
|
|
|
begin |
|
|
|
result := aElement.OwnerDocument.CreateElement(aName); |
|
|
|
if aElement.HasChildNodes |
|
|
|
then aElement.InsertBefore(result, aElement.FirstChild) |
|
|
|
else aElement.AppendChild(result); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class function TutlXmlHelperImpl.AppendNode(const aElement: TDOMElement; const aName: DOMString): TDOMElement; |
|
|
|
begin |
|
|
|
result := aElement.OwnerDocument.CreateElement(aName); |
|
|
|
aElement.AppendChild(result); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class procedure TutlXmlHelperImpl.PrependText(const aElement: TDOMElement; const aText: DOMString); |
|
|
|
var n: TDOMNode; |
|
|
|
begin |
|
|
|
n := aElement.OwnerDocument.CreateTextNode(aText); |
|
|
|
if aElement.HasChildNodes |
|
|
|
then aElement.InsertBefore(n, aElement.FirstChild) |
|
|
|
else aElement.AppendChild(n); |
|
|
|
end; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
class procedure TutlXmlHelperImpl.AppendText(const aElement: TDOMElement; const aText: DOMString); |
|
|
|
begin |
|
|
|
aElement.AppendChild(aElement.OwnerDocument.CreateTextNode(aText)); |
|
|
|
end; |
|
|
|
|
|
|
|
end. |
|
|
|
|