2007-07-12 14:46:45 +00:00
|
|
|
unit wst_delphi_xml;
|
|
|
|
|
|
|
|
interface
|
|
|
|
uses
|
|
|
|
SysUtils, Classes, xmldom, XMLIntf;
|
|
|
|
|
|
|
|
const
|
|
|
|
LineEnding = sLineBreak;
|
|
|
|
|
|
|
|
type
|
|
|
|
|
|
|
|
TDOMNode = IDOMNode;
|
|
|
|
TDOMNodeList = IDOMNodeList;
|
2007-07-13 22:33:55 +00:00
|
|
|
TDOMNamedNodeMap = IDOMNamedNodeMap;
|
2007-07-12 14:46:45 +00:00
|
|
|
TXMLDocument = IDOMDocument;
|
|
|
|
TDOMElement = IDOMElement;
|
|
|
|
|
|
|
|
function FindNode(ANode : TDOMNode; const ANodeName : string):TDOMNode;
|
|
|
|
function GetNodeItemsCount(const ANode : TDOMNode): Integer;
|
2007-07-13 22:33:55 +00:00
|
|
|
function GetNodeListCount(ANodeList : TDOMNodeList) : Integer ;overload;
|
|
|
|
function GetNodeListCount(ANodeList : TDOMNamedNodeMap) : Integer ;overload;
|
2007-07-12 14:46:45 +00:00
|
|
|
procedure ReleaseDomNode(ADomNode : IInterface);overload;
|
|
|
|
procedure ReleaseDomNode(var ADomNode : TXMLDocument);overload;
|
|
|
|
|
|
|
|
function CreateDoc() : TXMLDocument ;
|
|
|
|
procedure WriteXMLFile(ADoc : TXMLDocument; AStream : TStream);
|
|
|
|
procedure ReadXMLFile(ADoc : TXMLDocument; AStream : TStream);
|
|
|
|
function NodeToBuffer(ANode : TDOMNode):string ;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
uses XmlDoc;
|
|
|
|
|
|
|
|
function FindNode(ANode : TDOMNode; const ANodeName : string):TDOMNode;
|
|
|
|
var
|
|
|
|
i, c : Integer;
|
|
|
|
lst : TDOMNodeList;
|
|
|
|
begin
|
|
|
|
Result := nil;
|
|
|
|
if ANode.hasChildNodes then begin
|
|
|
|
lst := ANode.childNodes;
|
|
|
|
c := lst.length;
|
|
|
|
for i := 0 to Pred(c) do begin
|
|
|
|
if ( ANodeName = lst.item[i].nodeName ) then begin
|
|
|
|
Result := lst[i];
|
|
|
|
Break;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure WriteXMLFile(ADoc : TXMLDocument; AStream : TStream);
|
|
|
|
begin
|
|
|
|
(ADoc as IDOMPersist).saveToStream(AStream);
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure ReadXMLFile(ADoc : TXMLDocument; AStream : TStream);
|
|
|
|
begin
|
|
|
|
(ADoc as IDOMPersist).loadFromStream(AStream);
|
|
|
|
end;
|
|
|
|
|
|
|
|
function GetNodeItemsCount(const ANode : TDOMNode): Integer;
|
|
|
|
begin
|
|
|
|
if ANode.HasChildNodes then begin
|
|
|
|
Result := ANode.childNodes.length;
|
|
|
|
end else begin
|
|
|
|
Result := 0;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
2007-07-13 22:33:55 +00:00
|
|
|
function GetNodeListCount(ANodeList : TDOMNodeList) : Integer ;overload;
|
|
|
|
begin
|
|
|
|
Result := ANodeList.length;
|
|
|
|
end;
|
|
|
|
|
|
|
|
function GetNodeListCount(ANodeList : TDOMNamedNodeMap) : Integer ;overload;
|
2007-07-12 14:46:45 +00:00
|
|
|
begin
|
|
|
|
Result := ANodeList.length;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure ReleaseDomNode(ADomNode : IInterface);
|
|
|
|
begin
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure ReleaseDomNode(var ADomNode : TXMLDocument);
|
|
|
|
begin
|
|
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
function CreateDoc() : TXMLDocument ;
|
|
|
|
var
|
|
|
|
locDoc : IXMLDocument;
|
|
|
|
begin
|
|
|
|
locDoc := XmlDoc.TXMLDocument.Create(nil);
|
|
|
|
locDoc.Active := True;
|
|
|
|
Result := locDoc.DOMDocument;
|
|
|
|
end;
|
|
|
|
|
|
|
|
function NodeToBuffer(ANode : TDOMNode):string ;
|
|
|
|
var
|
|
|
|
locNodeEx : IDOMNodeEx;
|
|
|
|
begin
|
|
|
|
if Supports(ANode,IDOMNodeEx,locNodeEx) then begin
|
|
|
|
Result := locNodeEx.xml;
|
|
|
|
end else begin
|
|
|
|
raise Exception.Create('This Xml library do not provide "IDOMNodeEx" support.');
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
end.
|