Easy XML Changelog

[25-11-2023] - Version 8.2.3 Build 1
  • Added: Support for Delphi 12
[28-11-2022] - Version 8.2.2 Build 6
  • Solved: Some minor improvements.
[03-10-2021] - Version 8.2.1 Build 10
  • Added: Support for Delphi 11 Alexandria.
  • Solved: Some minor improvements.
[31-01-2021] - Version 8.2.1 Build 1
  • Solved: Some minor issues
[01-11-2020] - Version 8.1.1 Build 41
  • Added: Support for Delphi 10.4.1 Sydney.
  • Solved: Some minor issues with the XML and JSON serializers
  • Solved: The various RwXMLToXXX methods now also support the nullable XsXXX types.
[01-06-2020] - Version 8.1.1 Build 35
  • Added: Support for Delphi 10.4 Sydney
  • Solved: Some minor issues with the JSON serializer
[01-12-2019] - Version 8.1.1 Build 24
  • Solved: Some minor serialization/deserialization issues
  • Solved: Some minor issues with the JSON and REST invokers.
[11-08-2019] - Version 8.1.1 Build 6
  • Added: The Delphi 10.3 libraries have been rebuild with Delphi 10.3.2 and the "Runtime Package Compatibility Patch"
  • Added: ElementLists now support enumerators ("for element in elementlist do").
  • Solved: Some minor issues caused by the refactoring of the typeinfo retrieval.
[31-03-2019] - Version 8.1.0 Build 9
  • Added: Support for nullable XML Schema types.
    
    var
    s: XsString;
    begin
    s := XsString.Null;
    if s.IsNull then
         ShowMessage('s is null');
    s := 'Hello';
    s := s + ' World';
    end;
    
  • Modified: The serializers now use the new RAPWare RTTI system which allows for more control over the type naming using Type Aliasses.
  • Modified: The RwDecodeXMLDateTime() has been renamed and is moved to the uRwDateTimeUtils.pas. The new name is RwDecodeISODateTime().
  • Modified: When serializing enumerations and sets the serializer now uses the Qualified name as default (instead of the short name).
  • Modified: The serializable formats are no longer defined as string, but as an enumeration instead.
  • Modified: Both the XML and JSON serializer now serialize a stringlist to a structure with "items" instead of "values".
  • Solved: Some minor issues with serialization/deserialization.

    IMPORTANT: Windows XP is no longer supported. Easy MAPI can no longer be used on systems running Windows XP.

[25-11-2018] - Version 8.0.1 Build 10
  • Added: Delphi 10.3 Rio support
[10-09-2018] - Version 8.0.0 Build 16
  • Solved: Some minor issues in the XPath support.
  • Solved: When converting XML to JSON the "." in element names is now replaced by a "_".
[01-06-2018] - Version 8.0.0 Build 10
  • Modified: Easy XML is now a Cross-Platform compatible. It can be used on all platforms supported by Delphi.

    IMPORTANT Large parts of the code have been refactored in order to make Easy XML Cross-Platform compatible. Some of the changes can break existing code

  • Solved: Some minor changes to the uRwAmazonClient to improve compatibility with S3.
  • Added: The TRwWinHTTPClient now supports setting a specific SSL/TLS level via the SecureProtocols property.
  • Solved: Various minor issues.
[11-02-2018] - Version 7.3.0 Build 1
  • Solved: A JSON parse error was triggered when a JSON value ended with /n.
[21-12-2017] - Version 7.2.2 Build 28
  • Modified: The Delphi 10.2.2. libraries have been recompiled with Delphi 10.2.2. build 2004.
  • Solved: The specified search option in an XPath query is now also used inside a filter. eg.

FDOMDocument.SelectSingleElement('/bookstore/my:book[my:author="Robert Bob"]', [soQualifiedName]);
// now returns the same result as 
FDOMDocument.SelectSingleElement('/bookstore/book[author="Robert Bob"]', [soLocalName]);
[16-12-2017] - Version 7.2.2 Build 24
  • Solved: The RwXMLToDateTime(), RwDateTimeToXML, RwXMLToTime() and RwTimeToXML() did not always return the correct value when working with Timezone offsets.
  • Added: XML Durations are now supported.
  • Solved: Parsing CDATA could lead to an unexpected EOF error.
  • Added: The XPath parser now also supports string, number and datetime functions (Enterprise only).
  • Modified: The "TRwXMLDOMDocument.CaseInsenstive" option has been replaced with "IRwDOMDocument.Collation". The TRwXPathCollationASCIICI collation can be used for CaseInsenstive search operation and the TRwXPathCollationCodepoint collation can be used if CaseSensitivy is needed. The collation can be set for each document, if no collation is set the default collation is used (TRwXPathCollationASCIICI). The default collation can be changed by setting the uRwXMLDOM.DefaultXPathCollation variable.
  • Modified: The code in uRwWinsock.pas is moved to uRwIPHelper.pas and uRwWinsock.pas is deleted. The code is now fully compatible with IPV6.
  • Solved: Some minor issues.
[13-08-2017] - Version 7.2.2 Build 1
  • Added: Delphi 10.2 packages have been recompiled with Delphi 10.2.1.
  • Solved: Some minor issues.
[07-05-2017] - Version 7.2.1 Build 11
  • Solved: Processing a XML document with Processing Instructions and/or comments after the closing root element raised an exception.
  • Solved: Some minor issues.
[29-03-2017] - Version 7.2.1 Build 0
  • Added: Delphi 10.2 Tokyo support
[05-02-2017] - Version 7.2.0 Build 50
  • Solved: A few minor issues.
[14-01-2017] - Version 7.2.0 Build 42
  • Solved: An "Unexpected EOF" exception was raised when parsing JSON data which contained string values with the $ character.
[01-01-2017] - Version 7.2.0 Build 37
  • Solved: A few small issues in the serializers and invokers.
[28-08-2016] - Version 7.1.5 Build 9
  • Added: TRwAmazon (in uRwAmazon.pas). This class can be used to authenticate Amazon AWS requests. Note: This functionality also requires EasyCrypt to be installed!

constructor TFrmMain.Create(AOwner: TComponent);
begin
  inherited;
  FHTTPClient := TRwWinINetClient.Create(Self);
  FAmazon := TRwAmazon.Create(Self);
  FAmazon.HTTPClient  := FHTTPClient;
  FAmazon.Region      := 'eu-west-1';
  FAmazon.Service     := 'dynamodb';
  FAmazon.AccessKeyID := 'AKIAIOSF...youraccesskey....';
  FAmazon.AccessKey   := 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY';
end;

function TFrmMain.GetRecord: RwJSONString;
begin
  // Get a record from MyTable where the Keyvalue "00001"
  // == select * from MyTable where KeyFieldName = '00001'
  Result := FHTTPClient.RequestEx(
    httpPOST
    , 'https://dynamodb.eu-west-1.amazonaws.com'
    , '{"TableName":"MyTable","Key":{"KeyFieldName":{"S":"00001"}}}'
    , ' application/x-amz-json-1.0'
    , [TRwHTTPHeader.Create('X-Amz-Target','DynamoDB_20120810.GetItem')]
  );
end;
  • Improved: The AppServer now supports dynamic array function results.
  • Improved: Many small improvements to the AppServer, SOAP and JSON Invoker.
  • Solved: A few small issues in both the XML and JSON serializer.
[01-05-2016] - Version 7.1.5 Build 3
  • Added: Delphi 10.1 Berlin support
[09-04-2016] - Version 7.1.5 Build 1
  • Solved: A few minor issues.
[02-12-2015] - Version 7.1.4 Build 12
  • Added: Both the XML SAX and XML DOM parser can now be used to load JSON documents (as if it were XML).
  • Improved: Single Byte, Dual Byte and Multi Byte codepages are now all handled correctly.
  • Solved: A few minor issues.
[14-09-2015] - Version 7.1.4 Build 1
  • Added: Delphi 10 support
  • Modified: Many changes and fixes in the serializers.
[21-04-2015] - Version 7.1.3 Build 1
  • Added: Delphi XE8 support
  • Solved: A few minor issues.
[19-01-2015] - Version 7.1.2 Build 3
  • Improved: Some improvements in the handling of very large documents.
  • Improved: Many fixes for small issues with both of the HTTP Clients.
[08-09-2014] - Version 7.1.1 Build 17
  • Added: Delphi XE7 support.
  • Added: The TRwWinHTTPClient and the TRwWinInetClient.
  • Solved: Some Serialization issues.
  • Solved: A memory leak in the XPath parser.
[01-07-2014] - Version 7.1.1 Build 10
  • Solved: Parsing XML in MemoryStreams larger than 32MB in size would raise an AV.
  • Solved: Several Serialization issues.
[01-04-2014] - Version 7.1.1 Build 0
  • Added: Delphi XE6 support.
  • Solved: Some Minor Issues.
[01-11-2013] - Version 7.1.0 Build 1
  • Added: Delphi XE5 support.
  • Added: SOAP, REST and JSON support (XML Enterprise only).
  • Modified: The entire serialization framework has been rewritten from the ground up. The new framework is based on the RTTI functionality of Delphi XE2 and newer.
[19-07-2013] - Version 7.0.0 Build 35
  • Solved: In some cases the Element prefixes contained a leading colon. This caused the URI resolving to fail.
[03-06-2013] - Version 7.0.0 Build 27
  • Added: Delphi XE4 support.
  • Solved: An exception was raised when parsing XML files larger than 32 MB using a filestream.
[03-03-2013] - Version 7.0.0 Build 10
  • Added: Full support for Firemonkey V2.
[25-11-2012] - Version 6.2.1 Build 8
  • Improved: The serialization classes haven been rewritten and can now be used to serialize/deserialize to and from both JSON and XML.
  • Modified: The TRwADOSerializer has been renamed to TRwADOConverter
  • Solved: Some minor issues.
[01-10-2012] - Version 6.2.1 Build 4
  • Added: Delphi XE3 support.
  • Solved: Some minor issues.
[18-06-2012] - Version 6.1.1 Build 24
  • Solved: The "/" and "/elm/" XPath statements did not return the correct result.
  • Improved: The TRwDOMDocument.UseSchemaInstance is now set to true when a docuemnt is loaded with a rootnode which contains the "https://www.w3.org/2001/XMLSchema-instance" namespace.
  • Added: TRwDOMDocument.AsJSON and TRwDOMDocument.AsFormattedJSON. These property can be used to convert an XML document to a JSON document
  • Solved: The specified SelectOptions in XPATH statements were not used in child filters.
  • Solved: Setting the TRwDOMDocument.CaseSensitive did not work correctly.
  • Solved: Some minor issues.
[04-06-2012] - Version 6.1.1 Build 20
  • Improved: Easy XML now uses a new, easier to use, and faster parser.
  • Improved: It's now possible to create complex XPATH and JSONPATH statements. eg (XPATH) : //author[last-name = "Bob" and ../price > 50] eg (JSONPATH) : $..book[?((@.price<=8.95) || (@.price>=20))]
  • Improved: The various SAX events now contain string arguments instead of pointers to strings.
  • Improved: The TRwDOMElementList.Items[] property now accepts both integer and string index arguments. eg: Document.RootNode.Elements[1].NodeValue; or Document.RootNode.Elements['child'].NodeValue;
  • Modified: The soIgnoreNamespace select option has been replaced with soLocalName and soQualifiedName. When soLocalName is specified as SelectOption the specified name will be matched against the localname of an element (=soIgnoreNamespace) When soQualifiedName is specified as SelectOption the specified name will be matched against the qualifiedname of an element When neither is specified the document option (TRwDOMDocument.SelectMatchOption) will be used.
  • Modified: The soCaseInsensitive select option has been replaced with soCaseSensitive and soCaseInsensitive. When soCaseSensitive is specified as SelectOption the name matching will be case sensitive. When soCaseInsensitive is specified as SelectOption the name matching will be case insensitive. When neither is specified the document value (TRwDOMDocument.CaseSensitive) will be used.
  • Added: The default CaseSensitivity can be set using the global "DefaultCaseSensitive" variable. The value of this global variable will be used as default for a newly created TRwDOMDocument.
  • Added: The default SelectMatchOption can be set using the global "DefaultSelectMatchOption" variable. The value of this global variable will be used as default for a newly created TRwDOMDocument.
  • Added: Many new methods.
  • Modified: uRwXmlParser.pas has been removed. The functions in this unit are placed in uRwXmlUtils.pas.
  • Modified: property TRwDOMNodeList.Item[] renamed to TRwDOMNodeList.Items[].
  • Modified: property TRwDOMElementList.Item[] renamed to TRwDOMElementList.Items[].
  • Modified: property TRwDOMNode.AsXML renamed to TRwDOMNode.XML.
  • Modified: property TRwDOMNode.AsFormattedXML renamed to TRwDOMNode.FormattedXML.
  • Modified: property TRwDOMNode.AsInnerXML renamed to TRwDOMNode.InnerXML.
  • Modified: property TRwDOMNode.AsFormattedInnerXML renamed to TRwDOMNode.FormattedInnerXML.
  • Modified: property TRwDOMDocument.AsXML renamed to TRwDOMDocument.XML.
  • Modified: property TRwDOMElement.ChildElements renamed to TRwDOMElement.Elements.
  • Modified: property TRwDOMElement.GetChildElement renamed to TRwDOMElement.ElementByName.
  • Modified: Method TRwDomElement.AttribNodeByName renamed to TRwDomElement.AttributeByName.
  • Modified: TRwDOMDocument.AddProcessingInstruction has been replaced by the TRwDOMDocument.ProcessingInstruction[] property.
  • Modified: Index operators in XPATH statements are now 0 based instead of 1 based. eg: Document/Fields/Field[Value="10[0] returns the first field with a value of 10.
  • Improved: The various IRwDOM.. interfaces now contain the exact same functionality as the TRwDOM.. classes
  • Solved: Many minor issues
[01-10-2011] - Version 6.1.0 Build 3
  • Added: Delphi XE2 support.
  • Added: JSON Support
  • Solved: Some minor issues
[27-10-2010] - Version 6.0.0 Build 11
  • Added: Delphi XE support
  • Solved: Some minor issues
[06-04-2010] - Version 5.0.0 Build 45
  • Added: A Logviewer component (TRwLogViewer) that can be used in combination with the Rapware logger
[23-03-2010] - Version 5.0.0 Build 43
  • Solved: Some minor issues
[30-11-2009] - Version 5.0.0 Build 29
  • Solved: Some minor issues
[21-09-2009] - Version 5.0.0 Build 27
  • Added: Delphi 2010 support
[29-06-2009] - Version 5.0.0 Build 23
  • Solved: Attribute values are now xml encoded.
  • Solved: Searching using XPath fails if a filter contains a XPath reserved character in the filter.
  • Solved: The soCaseInsensitive flag did not work correctly in the InternalSelectNodes method
  • Solved: Some minor bugs
[27-04-2009] - Version 5.0.0 Build 14
  • Solved: TRwStringList.AsAnsiString now always returns the data in the codepage of the system
  • Added: TRwStringList.AsMBCS property; This property gives access to the stringlist data in the codepage of the stringlist (when using a MBCS).
  • Added: TRwDomElement.Values##### [] property
  • Added: TRwDomElement.Elements##### [] property
  • Solved: Some minor bugs
[02-03-2009] - Version 5.0.0 Build 8
  • Solved: Some minor bugs
[08-12-2008] - Version 5.0.0 Build 5
  • Solved: The SAX Parser can now handle VERY large XML files
  • Solved: Some minor bugs
[21-09-2008] - Version 5.0.0 Build 3
  • Solved: Some minor bugs
[26-08-2008] - Version 5.0.0 Build 2
  • Added: Delphi 2009 support
  • Modified: The Eaxy XML core has been rewritten.
  • Improved: Speed, XPath, Variant support, Unicode support, Namespace support and a lot more.
  • Modified: Delphi 5 and 6 are no longer supported.
[22-04-2007] - Version 3.5.3 Build 16
  • Added: Delphi 2007 support
  • Solved: Some minor reported bugs
[25-07-2006] - Version 3.5.0 Build 12
  • Modified: The W3C XML DOM component has been replaced by a component that implements the Borland DOM interfaces.
  • Added: The possibility to use the XML DOM component "class based", instead of only "interface based"
  • Added: Basic XPath support.
[12-05-2003] - Version 1.0.2 Build 2
  • Modified: We replaced our TRwXmlMemo with our new TRwCodeEdit.
[18-03-2003] - Version 1.0.1 Build 4
  • Solved: The CData element are now CDATA elements (all uppercase)
  • Solved: Improved decimal support in both dataset serializers
  • Added: Support for large (var)chars (>256 characters) in both dataset serializers
  • Improved: The SAX parser is now even faster
  • Solved: Some minor issues with the XMLDOM
[08-11-2002] - Version 1.0.0 Build 7
  • Solved: The dRwEasyXml.bpl raised an error when it was loaded into Delphi.
[02-11-2002] - Version 1.0.0 Build 6