2007-07-12 14:46:45 +00:00
|
|
|
{$INCLUDE wst_global.inc}
|
|
|
|
unit wst_fpc_xml;
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
|
|
Classes, SysUtils, DOM;
|
|
|
|
|
|
|
|
{$INCLUDE wst.inc}
|
|
|
|
{$INCLUDE wst_delphi.inc}
|
|
|
|
|
2009-02-14 01:15:34 +00:00
|
|
|
type
|
|
|
|
|
|
|
|
{ TDOMNodeSelectListImp }
|
|
|
|
|
|
|
|
TDOMNodeSelectListImp = class(TDOMNodeList)
|
|
|
|
private
|
|
|
|
FFilter: DOMString;
|
|
|
|
FUseFilter: Boolean;
|
|
|
|
protected
|
|
|
|
procedure BuildList(); override;
|
|
|
|
public
|
|
|
|
constructor Create(ANode: TDOMNode; const AFilter: DOMString);
|
|
|
|
end;
|
|
|
|
|
|
|
|
function FilterList(const ANode : TDOMNode; const ANodeName : DOMString) : TDOMNodeList ;
|
|
|
|
|
2007-07-12 14:46:45 +00:00
|
|
|
function GetNodeItemsCount(const ANode : TDOMNode): Integer;
|
2007-07-13 22:33:55 +00:00
|
|
|
function GetNodeListCount(ANodeList : TDOMNodeList) : Integer ;overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
|
|
|
function GetNodeListCount(ANodeList : TDOMNamedNodeMap) : Integer ;overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
2007-07-12 14:46:45 +00:00
|
|
|
procedure ReleaseDomNode(ADomNode : TDOMNode);overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
|
|
|
procedure ReleaseDomNode(ADomNode : TDOMNodeList);overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
2007-09-02 19:05:47 +00:00
|
|
|
procedure ReleaseDomNode(ADomNode : TDOMNamedNodeMap);overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
2007-07-12 14:46:45 +00:00
|
|
|
function CreateDoc() : TXMLDocument ;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
|
|
|
function FindNode(ANode : TDOMNode;const ANodeName : string) : TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
|
|
|
|
|
|
|
function NodeToBuffer(ANode : TDOMNode):string ;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
uses XMLWrite;
|
|
|
|
|
|
|
|
function GetNodeItemsCount(const ANode : TDOMNode): Integer;
|
|
|
|
var
|
|
|
|
chdLst : TDOMNodeList;
|
|
|
|
begin
|
|
|
|
if ANode.HasChildNodes then begin
|
|
|
|
chdLst := ANode.ChildNodes;
|
|
|
|
try
|
|
|
|
Result := chdLst.Count;
|
|
|
|
finally
|
|
|
|
chdLst.Release();
|
|
|
|
end;
|
|
|
|
end else begin
|
|
|
|
Result := 0;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
2007-09-02 19:05:47 +00:00
|
|
|
function GetNodeListCount(ANodeList : TDOMNodeList) : Integer ;overload;
|
2007-07-12 14:46:45 +00:00
|
|
|
begin
|
|
|
|
Result := ANodeList.Count;
|
|
|
|
end;
|
|
|
|
|
2007-09-02 19:05:47 +00:00
|
|
|
function GetNodeListCount(ANodeList : TDOMNamedNodeMap) : Integer ;overload;
|
2007-07-13 22:33:55 +00:00
|
|
|
begin
|
|
|
|
Result := ANodeList.Length;
|
|
|
|
end;
|
2007-07-12 14:46:45 +00:00
|
|
|
|
2007-09-02 19:05:47 +00:00
|
|
|
procedure ReleaseDomNode(ADomNode : TDOMNode);overload;
|
2007-07-12 14:46:45 +00:00
|
|
|
begin
|
|
|
|
ADomNode.Free();
|
|
|
|
end;
|
|
|
|
|
2007-09-02 19:05:47 +00:00
|
|
|
procedure ReleaseDomNode(ADomNode : TDOMNodeList);overload;
|
2007-07-12 14:46:45 +00:00
|
|
|
begin
|
|
|
|
ADomNode.Release();
|
|
|
|
end;
|
|
|
|
|
2007-09-02 19:05:47 +00:00
|
|
|
procedure ReleaseDomNode(ADomNode : TDOMNamedNodeMap);overload;
|
|
|
|
begin
|
|
|
|
ADomNode.Free();
|
|
|
|
end;
|
|
|
|
|
|
|
|
function CreateDoc() : TXMLDocument ;
|
2007-07-12 14:46:45 +00:00
|
|
|
begin
|
|
|
|
Result := TXMLDocument.Create();
|
|
|
|
Result.Encoding := 'UTF-8';
|
|
|
|
end;
|
|
|
|
|
|
|
|
function FindNode(ANode : TDOMNode;const ANodeName : string) : TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
|
|
|
begin
|
|
|
|
Result := ANode.FindNode(ANodeName);
|
|
|
|
end;
|
|
|
|
|
|
|
|
function NodeToBuffer(ANode : TDOMNode):string ;
|
|
|
|
var
|
|
|
|
locStream : TStringStream;
|
|
|
|
begin
|
|
|
|
locStream := TStringStream.Create('');
|
|
|
|
try
|
|
|
|
WriteXML(ANode,locStream);
|
|
|
|
Result := locStream.DataString;
|
|
|
|
finally
|
|
|
|
locStream.Free();
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
2009-02-14 01:15:34 +00:00
|
|
|
function FilterList(const ANode : TDOMNode; const ANodeName : DOMString) : TDOMNodeList ;
|
|
|
|
begin
|
|
|
|
Result := TDOMNodeSelectListImp.Create(ANode,ANodeName);
|
|
|
|
end;
|
|
|
|
|
|
|
|
{ TDOMNodeSelectListImp }
|
|
|
|
|
|
|
|
type
|
|
|
|
TDOMNodeCracked = class(TDOMNode);
|
|
|
|
procedure TDOMNodeSelectListImp.BuildList();
|
|
|
|
var
|
|
|
|
Child: TDOMNode;
|
|
|
|
begin
|
|
|
|
FList.Clear;
|
|
|
|
FRevision := TDOMNodeCracked(FNode).GetRevision();
|
|
|
|
|
|
|
|
Child := FNode.FirstChild;
|
|
|
|
while ( Child <> nil ) do begin
|
|
|
|
if ( Child.NodeType = ELEMENT_NODE ) and
|
|
|
|
( ( not FUseFilter ) or ( TDOMElement(Child).TagName = FFilter ) )
|
|
|
|
then begin
|
|
|
|
FList.Add(Child);
|
|
|
|
end;
|
|
|
|
Child := Child.NextSibling
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
constructor TDOMNodeSelectListImp.Create(ANode: TDOMNode; const AFilter: DOMString);
|
|
|
|
begin
|
|
|
|
inherited Create(ANode);
|
|
|
|
FFilter := AFilter;
|
|
|
|
FUseFilter := ( FFilter <> '*' );
|
|
|
|
end;
|
|
|
|
|
2007-07-12 14:46:45 +00:00
|
|
|
end.
|