这次更新的速度非常快。
4.81.00 May 9 2015 Important notes (changes that may break existing code) ====================================================== * Changed TkbmMWOnFileAccess event to allow rewriting Path. TkbmMWOnFileAccess = procedure (Sender:TObject; var Path:string; var AccessPermissions:TkbmMWFileAccessPermissions) of object; * Made many more things case sensitive in the XML parser and handlers to adhere correctly to XML standards. Thus the attribute ID is different from the attribute id now! New stuff ========= - Added JQueryEscaping:boolean property (default false) to TkbmMWJSONStreamer. It will double escape all backslashes (\) to adhere to jQuery non standards. Notice that double escaping is NOT JSON standards, but a defacto requirement when using jQuery as the recieving end. - Added optional AJQueryEscaping:boolean argument to kbmMWJSONQuoteString global function. - Added support for NaN and INF in kbmMWFloatToString, kbmMWStringToFloat and kbmMWTryStringToFloat. - Added new optional additional kbmMW_Element_Flags argument to kbmMW_Element attribute. Eg. TMyObject = class... [kbmMW_Element('somename',[mwefData])] MyField:integer; {kbmMW_Element('someothername')] MyOtherField:integer; end; This will marshal/unmarshal MyField as data of the TMyObject instead of a sub element called somename. Eg.20 See the new sample: DynamicXMLMarshalling. - Added new optional additional TypeStoreName and TypeValue arguments to kbmMW_Root attribute which are to be used in combination with the new kbmMW_ConditionalType attribute. TypeStoreName refers to a local string field in the object which will hold/be set to the type of the object while marshalling/unmarshalling. TypeValue is the value that will be set in that field. The new kbmMW_ConditionalType attribute takes a condition and a string value indicating the name of the type of the object if the condition is evaluated to true. A condition can be a simple equal statement or be a complex condition with AND and OR and multiple statements. See the new sample: DynamicXMLMarshalling. Changes/minor additions ======================= - Changed TkbmMWOnFileAccess event to allow rewriting Path. TkbmMWOnFileAccess = procedure (Sender:TObject; var Path:string; var AccessPermissions:TkbmMWFileAccessPermissions) of object; Notice that if you do have code using this event, you should cut out the event code, save, then doubleclick the event handler again and paste in your old code. Also notice that the path is always relative to the defined RootPath of the service. The RootPath is defined in the TkbmMWFileServiceDefinition returned when registering the file service. - Changed TkbmMWCustomSAXXMLParser to inherit from TInterfacedObject and removed custom referencecounting. This also affects TkbmMWDOMXML which descends from TkbmMWCustomSAXXMLParser. - Made a number of properties available via the IkbmMWDOMXMLParser interface: Root, Top,,IgnoreDuplicateIDs, AutoIndent, PreserveWhiteSpace, AutoLineFeed, StreamBOM, AutoDetectEncoding. - Changed TkbmMWDOMXMLNode to allow access to ID and Ref properties as attributes (id, ref). Changing the attribute id or ref will thus also affect the properties id and ref. - Removed handling href attributes as ref attribute in TkbmMWDOMXMLNode. href is now an ordinary attribute, without special handling. - Made many more things case sensitive in the XML parser and handlers to adhere correctly to XML standards. Thus the attribute ID is different from the attribute id now! - Changed so XML GetAsInt, GetAsInt64, GetAsFloat, GetAsDuration, GetAsBoolean and GetAsDataTime automatically filter out all whitespace characters (including cr/lf) before attempting to interpret value. - Changed XML parsing so if PreserveWhiteSpace property is false, then only leading and trailing whitespace is filtered. Fixes ===== - Fixed leak of TkbmMWHTTPURLRewrites object instance in TkbmMWHTTPServiceDefinition. - Fixed JSON marshalling of collection objects. - Fixed IOS Macapi.Foundation compilation issue in kbmMWGlobal.pas. - Fixed bug in AttribByNameIsNil property in kbmMWXML.pas.30