📄 omnixml.pas
字号:
{ }
{ E N D O F I N T E R F A C E D E C L A R A T I O N }
{ }
{ }
{ S T A R T O F I N T E R F A C E I M P L E M E N T A T I O N }
{ }
{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * }
type
TXMLParseError = class(TInterfacedObject, IXMLParseError)
private
FErrorCode: Integer;
FFilePos: Integer;
FLine: Integer;
FLinePos: Integer;
FReason: string;
FSrcText: WideString;
FURL: string;
function GetErrorCode: Integer;
function GetFilePos: Integer;
function GetLine: Integer;
function GetLinePos: Integer;
function GetReason: string;
function GetSrcText: WideString;
function GetURL: string;
protected
procedure SetErrorCode(const ErrorCode: Integer);
procedure SetFilePos(const FilePos: Integer);
procedure SetLine(const Line: Integer);
procedure SetLinePos(const LinePos: Integer);
procedure SetReason(const Reason: string);
procedure SetSrcText(const SrcText: WideString);
procedure SetURL(const URL: string);
public
destructor Destroy; override;
property ErrorCode: Integer read GetErrorCode;
property FilePos: Integer read GetFilePos;
property Line: Integer read GetLine;
property LinePos: Integer read GetLinePos;
property Reason: string read GetReason;
property SrcText: WideString read GetSrcText;
property URL: string read GetURL;
end;
TXMLNodeList = class;
TXMLNamedNodeMap = class;
TXMLDocument = class;
TXMLAttr = class;
TXMLElement = class;
TXMLText = class;
TXMLComment = class;
TXMLCDATASection = class;
TXMLProcessingInstruction = class;
TXMLNode = class(TInterfacedObject, IXMLNode)
protected
FOwnerDocument: TXMLDocument;
FNodeType: TNodeType;
FAttributes: IXMLNamedNodeMap;
FChildNodes: IXMLNodeList;
FParentNode: IXMLNode;
FNodeName: WideString;
FNodeValue: WideString;
function GetAttributes: IXMLNamedNodeMap;
function GetChildNodes: IXMLNodeList;
function GetFirstChild: IXMLNode;
function GetLastChild: IXMLNode;
function GetNextSibling: IXMLNode;
function GetNodeName: WideString;
function GetNodeType: TNodeType;
function GetNodeValue: WideString; virtual;
function GetOwnerDocument: IXMLDocument; virtual;
function GetParentNode: IXMLNode;
function GetPreviousSibling: IXMLNode;
procedure SetNodeValue(const Value: WideString); virtual;
procedure InternalWrite(const Stream: TStream; Text: WideString); virtual;
procedure InternalWriteToStream(const OutputStream: IUnicodeStream); virtual;
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); virtual;
procedure SetParentNode(const Parent: IXMLNode);
function GetText: WideString; virtual;
procedure SetText(const Value: WideString); virtual;
function GetXML: WideString;
public
property NodeName: WideString read GetNodeName;
property NodeValue: WideString read GetNodeValue write SetNodeValue;
property NodeType: TNodeType read GetNodeType;
property ParentNode: IXMLNode read GetParentNode;
property ChildNodes: IXMLNodeList read GetChildNodes;
property FirstChild: IXMLNode read GetFirstChild;
property LastChild: IXMLNode read GetLastChild;
property PreviousSibling: IXMLNode read GetPreviousSibling;
property NextSibling: IXMLNode read GetNextSibling;
property Attributes: IXMLNamedNodeMap read GetAttributes;
property OwnerDocument: IXMLDocument read GetOwnerDocument;
property Text: WideString read GetText write SetText;
constructor Create(const AOwnerDocument: TXMLDocument);
destructor Destroy; override;
function InsertBefore(const NewChild, RefChild: IXMLNode): IXMLNode;
function ReplaceChild(const NewChild, OldChild: IXMLNode): IXMLNode;
function RemoveChild(const OldChild: IXMLNode): IXMLNode;
function AppendChild(const NewChild: IXMLNode): IXMLNode;
function HasChildNodes: Boolean;
function CloneNode(const Deep: Boolean): IXMLNode; virtual;
procedure WriteToStream(const OutputStream: IUnicodeStream);
procedure SelectNodes(Pattern: string; var Result: IXMLNodeList); overload; virtual;
function SelectNodes(Pattern: string): IXMLNodeList; overload; virtual;
procedure SelectSingleNode(Pattern: string; var Result: IXMLNode); overload; virtual;
function SelectSingleNode(Pattern: string): IXMLNode; overload; virtual;
property XML: WideString read GetXML;
end;
{ TODO -omr : re-add after IXMLDocumentType will be properly supported }
(*
TXMLDocumentType = class(TXMLNode, IXMLNode)
private
function GetEntities: IXMLNamedNodeMap;
function GetName: WideString;
function GetNotations: IXMLNamedNodeMap;
public
property Name: WideString read GetName;
property Entities: IXMLNamedNodeMap read GetEntities;
property Notations: IXMLNamedNodeMap read GetNotations;
end;
*)
TXMLEntityReference = class(TXMLNode, IXMLEntityReference);
TXMLDocumentFragment = class(TXMLNode, IXMLDocumentFragment)
protected
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
public
constructor Create(const OwnerDocument: TXMLDocument);
end;
TXMLCustomList = class(TInterfacedObject, IXMLCustomList)
private
FList: TInterfaceList;
protected
function GetLength: Integer;
function GetItem(const Index: Integer): IXMLNode;
procedure Put(Index: Integer; Item: IXMLNode);
public
constructor Create;
destructor Destroy; override;
property Item[const Index: Integer]: IXMLNode read GetItem; default;
property Length: Integer read GetLength;
function Add(const XMLNode: IXMLNode): Integer;
function IndexOf(const XMLNode: IXMLNode): Integer;
procedure Insert(const Index: Integer; const XMLNode: IXMLNode);
function Remove(const XMLNode: IXMLNode): Integer;
procedure Delete(const Index: Integer);
procedure Clear;
end;
TXMLNodeList = class(TXMLCustomList, IXMLNodeList)
protected
FItemNo: Integer;
public
procedure Reset;
function NextNode: IXMLNode;
function AddNode(const Arg: IXMLNode): IXMLNode;
end;
TXMLNamedNodeMap = class(TXMLCustomList, IXMLNamedNodeMap)
public
function GetNamedItem(const Name: WideString): IXMLNode;
function SetNamedItem(const Arg: IXMLNode): IXMLNode;
function RemoveNamedItem(const Name: WideString): IXMLNode;
end;
TXMLElement = class(TXMLNode, IXMLElement)
private
FTagName: WideString;
protected
function GetTagName: WideString;
procedure InternalWriteToStream(const OutputStream: IUnicodeStream); override;
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
procedure SetTagName(const TagName: WideString);
public
property TagName: WideString read GetTagName;
constructor CreateElement(const OwnerDocument: TXMLDocument; const TagName: WideString);
function GetAttribute(const Name: WideString): WideString;
procedure SetAttribute(const Name, Value: WideString);
procedure RemoveAttribute(const Name: WideString);
function GetAttributeNode(const Name: WideString): IXMLAttr;
function SetAttributeNode(const NewAttr: IXMLAttr): IXMLAttr;
function RemoveAttributeNode(const OldAttr: IXMLAttr): IXMLAttr;
function GetElementsByTagName(const Name: WideString): IXMLNodeList;
procedure Normalize;
// function CloneNode(const Deep: Boolean): IXMLNode; override;
end;
TXMLProcessingInstruction = class(TXMLNode, IXMLProcessingInstruction)
private
FData: WideString;
function GetData: WideString;
function GetTarget: WideString;
protected
procedure SetData(Data: WideString); virtual;
procedure InternalWriteToStream(const OutputStream: IUnicodeStream); override;
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
public
property Target: WideString read GetTarget;
property Data: WideString read GetData;
constructor CreateProcessingInstruction(const OwnerDocument: TXMLDocument; const Target, Data: WideString);
end;
TXMLAttr = class(TXMLNode, IXMLAttr)
private
FSpecified: Boolean;
function GetName: WideString;
function GetSpecified: Boolean;
function GetValue: WideString;
procedure SetValue(const Value: WideString);
protected
procedure SetNodeValue(const Value: WideString); override;
function GetText: WideString; override;
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
procedure InternalWriteToStream(const OutputStream: IUnicodeStream); override;
public
property Name: WideString read GetName;
property Specified: Boolean read GetSpecified;
property Value: WideString read GetValue write SetValue;
constructor CreateAttr(const OwnerDocument: TXMLDocument; const Name: WideString);
end;
TXMLCharacterData = class(TXMLNode, IXMLCharacterData)
private
function GetData: WideString;
function GetLength: Integer;
procedure SetData(const Value: WideString);
protected
procedure SetNodeValue(const Value: WideString); override;
procedure InternalWriteToStream(const OutputStream: IUnicodeStream); override;
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
public
property Data: WideString read GetData write SetData;
property Length: Integer read GetLength;
constructor CreateCharacterData(const OwnerDocument: TXMLDocument; const Data: WideString); virtual;
function SubstringData(const Offset, Count: Integer): WideString;
procedure AppendData(const Arg: WideString);
procedure InsertData(const Offset: Integer; const Arg: WideString);
procedure DeleteData(const Offset, Count: Integer);
procedure ReplaceData(const Offset, Count: Integer; const Arg: WideString);
end;
TXMLText = class(TXMLCharacterData, IXMLText)
protected
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
public
constructor Create(const OwnerDocument: TXMLDocument; const Data: WideString); overload;
function SplitText(const Offset: Integer): IXMLText;
end;
TXMLComment = class(TXMLCharacterData, IXMLComment)
protected
procedure InternalWriteToStream(const OutputStream: IUnicodeStream); override;
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
public
constructor CreateComment(const OwnerDocument: TXMLDocument; const Data: WideString); virtual;
end;
TXMLCDATASection = class(TXMLText, IXMLCDATASection)
protected
procedure SetNodeValue(const Value: WideString); override;
procedure InternalWriteToStream(const OutputStream: IUnicodeStream); override;
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
public
constructor CreateCDATASection(const OwnerDocument: TXMLDocument; const Data: WideString); virtual;
end;
TXMLDocumentType = class(TXMLText, IXMLDocumentType)
protected
procedure InternalWriteToStream(const OutputStream: IUnicodeStream); override;
procedure ReadFromStream(const Parent: TXMLNode; const InputStream: IUnicodeStream); override;
public
constructor CreateDocumentType(const OwnerDocument: TXMLDocument; const Data: WideString); virtual;
end;
TXMLAttrClass = class of TXMLAttr;
TXMLCDATASectionClass = class of TXMLCDATASection;
TXMLCommentClass = class of TXMLComment;
TXMLDocumentTypeClass = class of TXMLDocumentType;
TXMLElementClass = class of TXMLElement;
TXMLProcessingInstructionClass = class of TXMLProcessingInstruction;
TXMLTextClass = class of TXMLText;
TXMLDocument = class(TXMLNode, IXMLDocument)
private
FDocType: IXMLDocumentType;
FIParseError: IXMLParseError;
FParseError: TXMLParseError;
FPreserveWhiteSpace: Boolean;
FURL: string;
protected
function GetParseError: IXMLParseError;
function GetDocType: IXMLDocumentType;
{ TODO -omr : re-add after IXMLDocumentType will be properly supported }
// procedure SetDocType(const Value: IXMLDocumentType);
function GetDocumentElement: IXMLElement;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -