diff --git a/uutlXmlHelper.pas b/uutlXmlHelper.pas new file mode 100644 index 0000000..b04d47e --- /dev/null +++ b/uutlXmlHelper.pas @@ -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) + ['{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. +