4.2.函数(Functions)
4.2.1.ComponentCreateFromXmlFile
unit NativeXmlObjectStorage
function ComponentCreateFromXmlFile(const FileName: string; Owner: TComponent; const Name: string): TComponent;
从文件名称为FileName的XML文件读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。
注:它调用ComponentCreateFromXmlStream实现。
4.2.2.ComponentCreateFromXmlNode
function ComponentCreateFromXmlNode(ANode: TXmlNode; Owner: TComponent; const Name: string): TComponent;
从TXmlNode类型的ANode节点读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。
注:它使用TsdXmlObjectReader类实现。
4.2.3.ComponentCreateFromXmlStream
function ComponentCreateFromXmlStream(S: TStream; Owner: TComponent; const Name: string): TComponent;
从XML流类型的S中读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。
注:它调用ComponentCreateFromXmlNode实现。
4.2.4.ComponentCreateFromXmlString
function ComponentCreateFromXmlString(const Value: string; Owner: TComponent; const Name: string): TComponent;
从XML字符串类型的Value中读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。
注:它调用ComponentCreateFromXmlStream实现。
4.2.5.ComponentSaveToXmlFile
procedure ComponentSaveToXmlFile(AComponent: TComponent; const FileName: string; AParent: TComponent);
存储组件AComponent所有公布的属性到名为FileName 的XML文件。指定AParent为了储存Parent正确的方法和事件参考。
注:它调用ObjectSaveToXmlFile实现。
4.2.6.ComponentSaveToXmlNode
procedure ComponentSaveToXmlNode(AComponent: TComponent; ANode: TXmlNode; AParent: TComponent);
存储组件AComponent所有公布的属性到TXmlNode格式的ANode中。指定AParent为了储存Parent正确的方法和事件参考。
注:它调用ObjectSaveToXmlNode实现。
4.2.7.ComponentSaveToXmlStream
procedure ComponentSaveToXmlStream(AComponent: TComponent; S: TStream; AParent: TComponent);
存储组件AComponent所有公布的属性到XML格式的流S中。指定AParent为了储存Parent正确的方法和事件参考。
注:它调用ObjectSaveToXmlStream实现。
4.2.8.ComponentSaveToXmlString
function ComponentSaveToXmlString(AComponent: TComponent; AParent: TComponent): string;
存储组件AComponent所有公布的属性到XML格式的字符串中。指定AParent为了储存Parent正确的方法和事件参考。
注:它调用ObjectSaveToXmlString实现。
4.2.9.DecodeBase64
Unit NativeXml
function DecodeBase64(const Source: UTF8String): RawByteString;
解码BASE64的数据Source为二进制数据。该函数返回为UTF8String的二进制数据。使用TStringStream转换这些数据流。源UTF8String可能包含换行符和控制字符,这些符号将被忽略。
4.2.10.DecodeBinHex
Unit NativeXml
function DecodeBinHex(const Source: UTF8String): RawByteString;
解码BinHex数据Source为二进制数据。该函数返回为UTF8String的二进制数据。使用TStringStream转换这些数据流。源UTF8String可能包含换行符和控制字符,这些符号将被忽略。
4.2.11.EncodeBase64
Unit NativeXml
function EncodeBase64(const Source: RawByteString): UTF8String;
二进制数据Source编码为BASE64。该函数返回UTF8String格式的BASE64编码数据,没有任何换行符。
4.2.12.EncodeBinHex
Unit NativeXml
function EncodeBinHex(const Source: RawByteString): UTF8String;
二进制数据Source编码为BINHEX。该函数返回UTF8String格式的BINHEX编码数据,没有任何换行符。
4.2.13.FormCreateFromXmlFile
function FormCreateFromXmlFile(const FileName: string; Owner: TComponent; const Name: string): TForm;
从文件名称为FileName的XML文件读取并创建窗体。为了成功地从头开始创建窗体,窗体的类必须事先调用RegisterClass进行登记。添加窗体到指定Owner的子组件列表。这通常是一个形式。指定Name作为创建的窗体的新窗体的名称。
注:它调用FormCreateFromXmlStream实现。
4.2.14.FormCreateFromXmlStream
function FormCreateFromXmlStream(S: TStream; Owner: TComponent; const Name: string): TForm;
从XML流格式的S读取并创建窗体。为了成功地从头开始创建窗体,窗体的类必须事先调用RegisterClass进行登记。添加窗体到指定Owner的子组件列表。这通常是一个形式。指定Name作为创建的窗体的新窗体的名称。
注:它调用ComponentCreateFromXmlNode实现。
4.2.15.FormCreateFromXmlString
function FormCreateFromXmlString(const Value: string; Owner: TComponent; const Name: string): TForm;
从XML字符串格式的Value读取并创建窗体。为了成功地从头开始创建窗体,窗体的类必须事先调用RegisterClass进行登记。添加窗体到指定Owner的子组件列表。这通常是一个形式。指定Name作为创建的窗体的新窗体的名称。
注:它调用FormCreateFromXmlStream实现。
4.2.16.FormSaveToXmlFile
procedure FormSaveToXmlFile(AForm: TForm; const FileName: string);
存储窗体AForm到名为FileName 的XML文件。这个方法存储窗体上所有的子组件,因而可以作为窗体存储的一种方法。
注:它调用ComponentSaveToXmlFile完成工作。
4.2.17.FormSaveToXmlStream
procedure FormSaveToXmlStream(AForm: TForm; S: TStream);
存储窗体AForm到XML流格式的S中。这个方法存储窗体上所有的子组件,因而可以作为窗体存储的一种方法。
注:它调用ComponentSaveToXmlStream实现。
4.2.18.FormSaveToXmlString
function FormSaveToXmlString(AForm: TForm): string;
存储窗体AForm到XML字符串格式中。这个方法存储窗体上所有的子组件,因而可以作为窗体存储的一种方法。
注:它调用ComponentSaveToXmlString实现。
4.2.19.ObjectLoadFromXmlFile
procedure ObjectLoadFromXmlFile(AObject: TObject; const FileName: string; AParent: TComponent);
从文件名称为FileName的XML文件读取并创建AObject,并装入他所有公布的属性。指定AParent为了解决Parent正确的方法和事件参考。
注:它调用ObjectLoadFromXmlStream实现。
4.2.20.ObjectLoadFromXmlNode
procedure ObjectLoadFromXmlNode(AObject: TObject; ANode: TXmlNode; AParent: TComponent);
从TXmlNode格式的ANode中读取并创建AObject,并装入他所有公布的属性。指定AParent为了解决Parent正确的方法和事件参考。
注:它使用TsdXmlObjectReader类实现。
4.2.21.ObjectLoadFromXmlStream
procedure ObjectLoadFromXmlStream(AObject: TObject; S: TStream; AParent: TComponent);
从XML流格式的S中读取并创建AObject,并装入他所有公布的属性。指定AParent为了解决Parent正确的方法和事件参考。
注:它调用ObjectLoadFromXmlNode实现。
4.2.22.ObjectLoadFromXmlString
procedure ObjectLoadFromXmlString(AObject: TObject; const Value: string; AParent: TComponent);
从XML字符串格式的Value中读取并创建AObject,并装入他所有公布的属性。指定AParent为了解决Parent正确的方法和事件参考。
注:它调用ObjectLoadFromXmlStream实现。
4.2.23.ObjectSaveToXmlFile
procedure ObjectSaveToXmlFile(AObject: TObject; const FileName: string; AParent: TComponent);
存储AObject所有公布的属性到文件名称为FileName的XML文件。指定AParent为了解决Parent正确的方法和事件参考。
注:它调用ObjectSaveToXmlStream实现。
4.2.24.ObjectSaveToXmlNode
procedure ObjectSaveToXmlNode(AObject: TObject; ANode: TXmlNode; AParent: TComponent);
存储AObject所有公布的属性到TXmlNode类型的的ANode中。指定AParent为了解决Parent正确的方法和事件参考。
注:它使用TsdXmlObjectWriter类实现。
4.2.25.ObjectSaveToXmlStream
procedure ObjectSaveToXmlStream(AObject: TObject; S: TStream; AParent: TComponent);
存储AObject所有公布的属性到XML流格式的S中。指定AParent为了解决Parent正确的方法和事件参考。
注:它调用ObjectSaveToXmlNode实现。
4.2.26.ObjectSaveToXmlString
function ObjectSaveToXmlString(AObject: TObject; AParent: TComponent): string;
存储AObject所有公布的属性到XML字符串格式的Value中。指定AParent为了解决Parent正确的方法和事件参考。
注:它调用ObjectSaveToXmlStream实现。
4.2.27.sdAddControlChars
Unit NativeXml
function sdAddControlChars(const AValue: UTF8String; const Chars: UTF8String; Interval: integer): UTF8String;
这个函数将在Interval间隔的字符后,反复向UTF8String类型的AValue区间增加控制字符Chars。
4.2.28.sdAnsiToUtf8
Unit NativeXml
function sdAnsiToUtf8(const S: AnsiString): UTF8String;
转换一个AnsiString 类型字符串为一个UTF8编码字符串。
4.2.29.sdDateTimeFromString
Unit NativeXml
function sdDateTimeFromString(const ADate: UTF8String; UseLocalBias: Boolean): TDateTime;
根据W3C日期/时间规范,转换UTF8String类型的ADate为日期时间(TDateTime)类型,可以在http://www.w3.org/TR/NOTE-datetime找到该规范。如果有一个转换错误,将引发异常。
4.2.30.sdDateTimeFromStringDefault
Unit NativeXml
function sdDateTimeFromStringDefault(const ADate: UTF8String; ADefault: TDateTime; UseLocalBias: Boolean): TDateTime;
根据W3C日期/时间规范,转换UTF8String类型的ADate为日期时间(TDateTime)类型,可以在http://www.w3.org/TR/NOTE-datetime找到该规范。如果有一个转换错误,返回缺省值ADefault。
4.2.31.sdDateTimeToString
Unit NativeXml
function sdDateTimeToString(ADate: TDateTime; UseLocalBias: Boolean): UTF8String;
根据W3C日期/时间规范,转换日期时间(TDateTime)类型的ADate为UTF8String类型,可以在http://www.w3.org/TR/NOTE-datetime找到该规范。
4.2.32.sdRemoveControlChars
Unit NativeXml
function sdRemoveControlChars(const AValue: UTF8String): UTF8String;
这个函数从UTF8String类型的AValue中移除控制字符(Tab, CR, LF and Space)。
4.2.33.sdUnicodeToUtf8
Unit NativeXml
function sdUnicodeToUtf8(const W: UnicodeString): UTF8String;
转换一个UnicodeString到UTF8编码字符串。
4.2.34.sdUpCase
Unit NativeXml
function sdUpCase(Ch: AnsiChar): AnsiChar;
将字符转换为大写('a'..'z' 变为 'A'..'Z')。
4.2.35.sdUTF8EscapeString
Unit NativeXml
function sdUTF8EscapeString(const AValue: UTF8String): UTF8String;
将AValue的所有转义字符转换成相应的字符串。
4.2.36.sdUTF8FindString
Unit NativeXml
function sdUTF8FindString(const SubString: UTF8String; const S: UTF8String; Start: integer; Close: integer; var APos: integer): boolean;
在UTF8String格式的S中查找子字符串SubString,仅在Start和Close之间查找字符。如果找到,函数返回True。APos体现找到的第一个位置。
4.2.37.sdUTF8MatchString
Unit NativeXml
function sdUTF8MatchString(const SubString: UTF8String; const S: UTF8String; Start: integer): boolean;
检查UTF8String格式的S中,Start位置是否有子字符串SubString。
4.2.38.sdUTF8ParseAttributes
Unit NativeXml
procedure sdUTF8ParseAttributes(const AValue: UTF8String; Start: integer; Close: integer; Attributes: TsdUTF8StringList);
在UTF8String格式的AValue中查找所有Name =“Value”片段(从Start到Close – 1),并把所产生的属性写入StringList中。调用这个函数前这StringList必须已初始化。
4.2.39.sdUTF8QuotedString
Unit NativeXml
function sdUTF8QuotedString(const AValue: UTF8String): UTF8String;
用引号将字符串AValue括起来。
4.2.40.sdUTF8StringReplace
Unit NativeXml
function sdUTF8StringReplace(const S: UTF8String; const OldPattern: UTF8String; const NewPattern: UTF8String): UTF8String;
4.2.41.sdUtf8ToAnsi
Unit NativeXml
function sdUtf8ToAnsi(const S: UTF8String): AnsiString;
UTF8编码的字符串转换为AnsiString类型。可能会导致损失!
4.2.42.sdUtf8ToUnicode
Unit NativeXml
function sdUtf8ToUnicode(const S: UTF8String): UnicodeString;
转换一个UTF8编码字符串到UnicodeString。
4.2.43.sdUTF8Trim
Unit NativeXml
function sdUTF8Trim(const AValue: UTF8String): UTF8String;
修剪UTF8String类型字符串AValue两端的控制字符(Tab、LF、CR、Space)。
4.2.44.sdUTF8TrimPos
Unit NativeXml
function sdUTF8TrimPos(const AValue: UTF8String; var Start: integer; var Close: integer): boolean;
在Start和Close - 1之间修剪UTF8String字符串AValue(删除Start和Close – 1之间空格)。如果结果UTF8String仍然有一个长度> 0,函数返回True。
4.2.45.sdUTF8UnEscapeString
Unit NativeXml
function sdUTF8UnEscapeString(const AValue: UTF8String): UTF8String;
替换字符串AValue中所有转义的原始字符。这些字符包括&#...;和&#x..;
4.2.46.sdUTF8UnQuotedString
Unit NativeXml
function sdUTF8UnQuotedString(const AValue: UTF8String): UTF8String;
从字符串AValue 中移除引号。
4.2.47.sdUTF8WriteStringToStream
Unit NativeXml
procedure sdUTF8WriteStringToStream(S: TStream; const AString: UTF8String);
写一个UTF8String字符串到流S。
4.2.48.sdWriteNumber
Unit NativeXml
function sdWriteNumber(Value: double; SignificantDigits: integer; AllowScientific: boolean): UTF8String;
转换一个数值到一个UTF8String字符串,使用SignificantDigits来表示有效位数,如果想要更短的结果,设置AllowScientific允许使用科学记数法。
4.2.49.XmlAppendToExistingFile
Unit: NativeXmlAppend
procedure XmlAppendToExistingFile(const AFilename: string; ANode: TXmlNode; ALevel: integer {$IFDEF D4UP});
有了这个程序,我们可以添加一个节点(TXmlNode)到现有的XML文件。该文件将不会被完整读入,其数据将只是在最后追加。为了做到这一点,该文件是从最终扫描,找到最后的位于ALevel层次的节点。 ALevel = 0将添加在最后的新节点。这是不明智的,因为XML不允许多个根节点。选择ALevel = 1添加在根目录下(默认)第1级的新节点。
提示:如果你想开始一个空的(模板)XmlDocument中,一定要保存它之前设置TsdXmlDocument.UseFullNodes为True。这将确保在根节点上正确增加。
注1:此方法不适用于Unicode文件。
4.3.类型(Types)
4.3.1.PBigByteArray
Unit NativeXml
PBigByteArray = ^TBigByteArray;
4.3.2.PUnicodeChar
Unit NativeXml
PUnicodeChar = PWideChar;
4.3.3.RawByteString
Unit NativeXml
RawByteString = AnsiString;
4.3.4.TBigByteArray
Unit NativeXml
TBigByteArray = array[0..MaxInt - 1] of byte;
TBigByteArray是一个类似标准TByteArray(Windows单元),但它可以包含多达到maxInt个字节数组。当工作与缓冲区大于32768个字节,有助于避免这种类型范围检查错误。
4.3.5.TBinaryEncodingType
Unit NativeXml
TBinaryEncodingType = (xbeBinHex, xbeBase64);
调用TXmlNode的BufferRead和BufferWrite时,使用TBinaryEncodingType选择采样什么样的二进制编码。
4.3.6.TBytes
Unit NativeXml
TBytes = TBigByteArray;
4.3.7.TPointer
Unit NativeXml
TPointer = Pointer;
4.3.8.TsdStreamModeType
Unit NativeXml
TsdStreamModeType = (umUnknown, umRead, umWrite);
此枚举定义转换流访问模式。
4.3.9.TStringEncodingType
Unit NativeXml
TStringEncodingType = (seAnsi, seUCS4BE, seUCS4LE, seUCS4_2143, seUCS4_3412, se16BitBE, se16BitLE, seUTF8, seUTF16BE, seUTF16LE, seEBCDIC);
定义的字符串的编码方式。
4.3.10.TXmlCompareOption
Unit NativeXml
TXmlCompareOption = (xcNodeName, xcNodeType, xcNodeValue, xcAttribCount, xcAttribNames, xcAttribValues, xcChildCount, xcChildNames, xcChildValues, xcRecursive);
4.3.11.TXmlCompareOptions
Unit NativeXml
TXmlCompareOptions = set of TXmlCompareOption;
4.3.12.TXmlElementType
Unit NativeXml
TXmlElementType = (xeNormal, xeComment, xeCData, xeDeclaration, xeStylesheet, xeDoctype, xeElement, xeAttList, xeEntity, xeNotation, xeExclam, xeQuestion, xeCharData, xeUnknown);
TXmlElementType列举了可以在XML文档中元素的不同类型。
4.3.13.TXmlFormatType
Unit NativeXml
TXmlFormatType = (xfReadable, xfCompact);
TNativeXml.Format说明:
xfReadable(默认)能够用标准的编辑器读取的xml文件。
xfCompact来保存XML完全兼容和最小尺寸。
4.3.14.TXmlNodeCompareEvent
Unit NativeXml
TXmlNodeCompareEvent = function (Sender: TObject; Node1, Node2: TXmlNode; Info: TPointer): integer of object;
此事件是用在TNativeXml.OnNodeCompare事件,如果Node1 < Node2应返回-1,如果Node1 = Node2应返回0,如果Node1 > Node2应返回1。
4.3.15.TXMLNodeCompareFunction
Unit NativeXml
TXMLNodeCompareFunction = function (Node1, Node2: TXmlNode; Info: TPointer): integer;
通过TXmlNode.SortChildNodes调用的函数。如果Node1 < Node2应返回-1,如果Node1 = Node2应返回0,如果Node1 > Node2应返回1。
4.3.16.TXmlNodeEvent
Unit NativeXml
TXmlNodeEvent = procedure (Sender: TObject; Node: TXmlNode) of object;
一个基于对象的TXmlNode节点为基础的事件。
4.3.17.TXmlProgressEvent
Unit NativeXml
TXmlProgressEvent = procedure (Sender: TObject; Size: integer) of object;
一个被用来表示加载或保存进度事件。
4.3.18.UnicodeChar
Unit NativeXml
UnicodeChar = WideChar;
4.3.19.UnicodeString
Unit NativeXml
UnicodeString = WideString;
4.3.20.ustring
Unit NativeXmlAppend
ustring = UTF8String;
4.4.变量(Variables)
Unit NativeXml;
cDefaultBinaryEncoding: TBinaryEncodingType = xbeBase64;
cDefaultDropCommentsOnParse: boolean = False;
cDefaultEncodingString: UTF8String = 'UTF-8';
cDefaultExternalEncoding: TStringEncodingType = seUTF8;
cDefaultFloatAllowScientific: boolean = True;
cDefaultFloatSignificantDigits: integer = 6;
cDefaultIndentString: UTF8String = ' ';
cDefaultUseFullNodes: boolean = False;
cDefaultUseLocalBias: boolean = False;
cDefaultVersionString: UTF8String = '1.0';
cDefaultWriteOnDefault: boolean = True;
cDefaultXmlFormat: TXmlFormatType = xfCompact;
4.5.常量(Constants)
4.5.1.Unit: NativeXml
cBase64Char: array[0..63] of AnsiChar =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
这些Ansi符号用于从数据缓冲区生成BASE64字符时使用。
cBase64PadChar: AnsiChar = '=';
cBomInfoCount = 15;
cBomInfo: array[0..cBomInfoCount - 1] of TBomInfo =
( (BOM: ($00,$00,$FE,$FF); Len: 4; Encoding: seUCS4BE; HasBOM: true),
(BOM: ($FF,$FE,$00,$00); Len: 4; Encoding: seUCS4LE; HasBOM: true),
(BOM: ($00,$00,$FF,$FE); Len: 4; Encoding: seUCS4_2143; HasBOM: true),
(BOM: ($FE,$FF,$00,$00); Len: 4; Encoding: seUCS4_3412; HasBOM: true),
(BOM: ($FE,$FF,$00,$00); Len: 2; Encoding: seUTF16BE; HasBOM: true),
(BOM: ($FF,$FE,$00,$00); Len: 2; Encoding: seUTF16LE; HasBOM: true),
(BOM: ($EF,$BB,$BF,$00); Len: 3; Encoding: seUTF8; HasBOM: true),
(BOM: ($00,$00,$00,$3C); Len: 4; Encoding: seUCS4BE; HasBOM: false),
(BOM: ($3C,$00,$00,$00); Len: 4; Encoding: seUCS4LE; HasBOM: false),
(BOM: ($00,$00,$3C,$00); Len: 4; Encoding: seUCS4_2143; HasBOM: false),
(BOM: ($00,$3C,$00,$00); Len: 4; Encoding: seUCS4_3412; HasBOM: false),
(BOM: ($00,$3C,$00,$3F); Len: 4; Encoding: seUTF16BE; HasBOM: false),
(BOM: ($3C,$00,$3F,$00); Len: 4; Encoding: seUTF16LE; HasBOM: false),
(BOM: ($3C,$3F,$78,$6D); Len: 4; Encoding: seAnsi; HasBOM: false),
(BOM: ($4C,$6F,$A7,$94); Len: 4; Encoding: seEBCDIC; HasBOM: false) );
cControlChars: set of AnsiChar = [#9, #10, #13, #32];
Tab, LF, CR, Space
cEscapeCount = 5;
不同的转义字符数
cEscapes: array[0..cEscapeCount - 1] of UTF8String = ('&', '<', '>', '''', '"');
这些都是必须转义字符。
cHexChar: array[0..15] of AnsiChar = '0123456789ABCDEF';
这些常数用于从数据缓冲区生成hex字符
cHexCharLoCase: array[0..15] of AnsiChar = '0123456789abcdef';
cMaxBufferSize = $10000;
65536字节的缓冲区
cNativeXmlVersion = '3.10';
NativeXml单元的当前版本
cNodeValueBuf = 2048;
在每个值的缓冲区增加分配的字节数
cQuoteChars: set of AnsiChar = ['"', ''''];
cReplaces: array[0..cEscapeCount - 1] of UTF8String = ('&', '<', '>', ''', '"');
这些字符串替换转义字符 - 相同的顺序
cTags: array[0..cTagCount - 1] of TTagType = ( (FClose: '>]]'; FStart: '[ATADC[!<'), (FClose: '>--'; FStart: '--!<'), (FClose: '>?'; FStart: '?<'), (FClose: '>'; FStart: '<') );
sxeCannotConverToBool = 'Cannot convert value to bool';
sxeCannotConvertToFloat = 'Cannot convert value to float';
sxeDeclarationMustBeFirstElem = 'Xml declaration must be first element';
sxeDoctypeAfterRootElement = 'Doctype declaration found after root element';
sxeIllegalElementType = 'Illegal element type';
sxeMoreThanOneDeclaration = 'More than one xml declaration found in xml';
sxeMoreThanOneDoctype = 'More than one doctype declaration found in root';
sxeSignificantDigitsOutOfRange = 'Significant digits out of range';
sxeXmlNodeNotAssigned = 'XML Node is not assigned';
xcAll: TXmlCompareOptions = [xcNodeName, xcNodeType, xcNodeValue, xcAttribCount, xcAttribNames, xcAttribValues, xcChildCount, xcChildNames, xcChildValues, xcRecursive];
4.5.2.Unit:NativeXmlObjectStorage
sxrInvalidPropertyValue = 'Invalid property value';
sxrUnregisteredClassType = 'Unregistered classtype encountered in ';
sxwIllegalVarType = 'Illegal variant type';
sxwInvalidMethodName = 'Invalid method name';
4.6.单元
4.6.1.NativeXml.pas
unit NativeXml
这是执行读取和写入XML文档的一个小巧的Delpi代码。
您可以使用此代码从文件、流或字符串中读取XML文档,。在装载过程中,产生可用于显示加载进度的事件。
注:任何外部编码(ANSI,UTF16等)转换为一个内部编码是ANSI或UTF8。当加载的文档基于ANSI,将是ANSI编码,在其他情况下(使用UTF8,UTF16)的编码将是UTF8。
原作者:Nils Haeck硕士(n.haeck @ simdesign.nl)原稿日期:2003年4月1日
版本
见下文版权所有(c)2003-2010 Simdesign BV的贡献者(补):斯特凡Glienke
首先在所附LICENSE.txt许可条件下,它不允许在任何情况下出版或复制这个代码!
该软件是基于一个分布式“AS IS”,没有任何明示或暗示的保证。
有关详细信息,请访问http://www.simdesign.nl/xml.html。
4.6.1.1.类(Classes)
TNativeXml
TsdBufferedReadStream
TsdBufferedStream
TsdBufferedWriteStream
TsdCodecStream
TsdStringBuilder
TsdSurplusReader
TsdUtf8Stream
TsdUTF8StringList
TsdUTF8StringStream
TXmlNode
TXmlNodeList
4.6.1.2.函数(Functions)
DecodeBase64
DecodeBinHex
EncodeBase64
EncodeBinHex
sdAddControlChars
sdAnsiToUtf8
sdDateTimeFromString
sdDateTimeFromStringDefault
sdDateTimeToString
sdRemoveControlChars
sdUnicodeToUtf8
sdUpCase
sdUTF8EscapeString
sdUTF8FindString
sdUTF8MatchString
sdUTF8ParseAttributes
sdUTF8QuotedString
sdUTF8StringReplace
sdUtf8ToAnsi
sdUtf8ToUnicode
sdUTF8Trim
sdUTF8TrimPos
sdUTF8UnEscapeString
sdUTF8UnQuotedString
sdUTF8WriteStringToStream
sdWriteNumber
4.6.1.3.类型(Types)
PBigByteArray
PUnicodeChar
RawByteString
TBigByteArray
TBinaryEncodingType
TBytes
TPointer
TsdStreamModeType
TStringEncodingType
TXmlCompareOption
TXmlCompareOptions
TXmlElementType
TXmlFormatType
TXmlNodeCompareEvent
TXMLNodeCompareFunction
TXmlNodeEvent
TXmlProgressEvent
UnicodeChar
UnicodeString
4.6.1.4.变量(Variables)
cDefaultBinaryEncoding
cDefaultDropCommentsOnParse
cDefaultEncodingString
cDefaultExternalEncoding
cDefaultFloatAllowScientific
cDefaultFloatSignificantDigits
cDefaultIndentString
cDefaultUseFullNodes
cDefaultUseLocalBias
cDefaultVersionString
cDefaultWriteOnDefault
cDefaultXmlFormat
4.6.1.5.常量(Constants)
cBase64Char
cBase64PadChar
cBomInfo
cBomInfoCount
cControlChars
cEscapeCount
cEscapes
cHexChar
cHexCharLoCase
cMaxBufferSize
cNativeXmlVersion
cNodeValueBuf
cQuoteChars
cReplaces
cTags
sxeCannotConverToBool
sxeCannotConvertToFloat
sxeDeclarationMustBeFirstElem
sxeDoctypeAfterRootElement
sxeIllegalElementType
sxeMoreThanOneDeclaration
sxeMoreThanOneDoctype
sxeSignificantDigitsOutOfRange
sxeXmlNodeNotAssigned
xcAll
4.6.2.NativeXmlAppend.pas
Unit NativeXmlAppend
本机实现了一个方法,将XML片段到现有XML文件的结尾。该文件永远不会完全加载到内存中,新的数据将在文件尾部追加。
这种单元需要NativeXml。
可能的例外(除了定期进行文件访问的):
“开始阅读逆向流”:S中提供的文件不是一个XML文件,或者它是一个XML文件,但是没有足够的层次。该XML文件应该在其ALevel元素后至少含有一个标签。该算法通过完整的文件,并从开始之际抵达没有找到一个合适的位置插入节点数据。
“层次无法找到”这将引发异常当最后一个元素不包含足够的层次,因此算法遇到一个开放的标记,其中它期望一个结束标记。
4.6.2.1.例子 1
我们试图在这个XML文件中加入3级节点< Root><Level1> <Level2> </Level2> </Level1> <Level1> < -- 这个最后一个节点没有2级,所以该算法</Level1>不知道从哪里加3级的数据到2级下</ Root >
看一个实现例子4
原作者:Nils Haeck硕士,版权所有(c)2003-2009 Simdesign B.V.
首先在所附LICENSE.txt许可条件下,它不允许在任何情况下出版或复制这个代码!
该软件是基于一个分布式“AS IS”,没有任何明示或暗示的保证。
有关详细信息,请访问http://www.simdesign.nl/xml.html。
4.6.2.2.函数(Functions)
XmlAppendToExistingFile
4.6.2.3.类型(Types)
ustring