sabre/xml
sabre/xml is an XML library that you may not hate.
4.1.0
36M downloads/mo
#681 most downloaded on Packagist
sabre-io/xml
What this package is like to depend on
Last release 3 months ago
27 Apr 2026
Release timing varies
gaps range from 8 days to 1.6 years
Nearly every release is documented
notes for 58 of 61 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
61 releases · first in 2013
3 releases in the last 12 months
see the full history below
Release timeline
60 releases · Feb 2013 to Apr 2026Releases
latest 60 of 61-
4.1.027 Apr 2026Release notes
Open source →4.1.0 (2026-04-27)
- #325 chore: support PHP 8.2 and up ( @phil-davis )
- *326 chore: remove phpVersion from phpstan.neon ( @phil-davis )
This release supports PHP 8.2 and up. That is specified in composer.json so consumers should automatically select it only for projects that have minimum PHP 8.2 support.
The 4.0.* release series, supporting PHP 7.4 8.0 8.1, will have bugfixes backported if relevant/needed for some time.
Release notes
Open source →- #325 chore: support PHP 8.2 and up ( @phil-davis )
- *326 chore: remove phpVersion from phpstan.neon ( @phil-davis )
-
4.0.702 Apr 2026Release notes
Open source →4.0.7 (2026-04-02)
- #305 phpstan major version 2 (@phil-davis)
- #317 add rector and run in CI (@phil-davis)
Release notes
Open source →- #305 phpstan major version 2 ( @phil-davis )
- *317 add rector and run in CI ( @phil-davis )
-
4.0.606 Sep 2024Release notes
Open source →4.0.6 (2024-09-06)
- #281 delete unused bin directory ( @szepeviktor )
- #282 stop exporting php-cs-fixer config ( @szepeviktor )
- #298 fix for passing a closed resource to Service parse or expect (@phil-davis)
Release notes
Open source →- #281 delete unused bin directory ( @szepeviktor )
- #282 stop exporting php-cs-fixer config ( @szepeviktor )
- #298 fix for passing a closed resource to Service parse or expect (@phil-davis)
-
4.0.518 Apr 2024Release notes
Open source →- #270 Fixed handling of elements from foreign namespaces in values object ( @mrbig )
- #271 Code format changes for php-cs-fixer 3.51 ( @phil-davis )
- #272 More precise parseClarkNotation return type ( @staabm )
-
4.0.409 Nov 2023Release notes
Open source →- #260 fix: more return type declarations on xmlDeserialize ( @DeepDiver1975 )
-
4.0.309 Nov 2023Release notes
Open source →- #258 fix: return type of XmlFragment::xmlDeserialize to match base declaration ( @DeepDiver1975 )
-
4.0.228 Jun 2023 -
4.0.128 Jun 2023Release notes
Open source →- #229 Fixed error where valueobject has eaten too much ( @mrbig )
- #238 cs-fixer and CI updates ( @phil-davis )
- #234 Call static assert functions with self:: tests-only ( @phil-davis )
- #231 Adjust code style to meet current php-cs-fixer ( @phil-davis )
-
4.0.026 Sep 2022 -
3.0.702 Apr 2026Release notes
Open source →3.0.7 (2026-04-02)
- #318 phpstan major version 2 (@phil-davis)
- #320 add rector and run in CI (@phil-davis)
Release notes
Open source →- #318 phpstan major version 2 (@phil-davis)
- *320 add rector and run in CI (@phil-davis)
-
3.0.606 Sep 2024Release notes
Open source →3.0.6 (2024-09-06)
- #298 fix for passing a closed resource to Service parse or expect (@phil-davis)
Release notes
Open source →- #298 fix for passing a closed resource to Service parse or expect (@phil-davis)
-
3.0.505 Sep 2024Release notes
Open source →3.0.5 (2024-09-05)
- #294 Add PHP 8.4 compliance for v3 branch ( @phil-davis )
-
3.0.418 Apr 2024Release notes
Open source →- #270 Fixed handling of elements from foreign namespaces in values object ( @mrbig )
- #272 More precise parseClarkNotation return type ( @staabm )
-
3.0.309 Nov 2023Release notes
Open source →- #262 Backport fix: return type of XmlFragment::xmlDeserialize to match base declaration ( @phil-davis )
-
3.0.228 Jun 2023 -
3.0.128 Jun 2023Release notes
Open source →- #229 Fixed error where valueobject has eaten too much ( @mrbig )
- #239 cs-fixer and CI updates ( @phil-davis )
-
3.0.017 Aug 2022Release notes
Open source →- #220 Set minimum PHP to 7.4 and declare types ( @phil-davis )
- #219 Update .gitattributes ( @cedric-anne )
- #217 Declare types ( @staabm )
- #213 added phpstan types to deserializer functions ( @staabm )
- #214 update phpstan 1.x ( @staabm )
-
2.2.1106 Sep 2024Release notes
Open source →2.2.11 (2024-09-06)
- #298 fix for passing a closed resource to Service parse or expect (@phil-davis)
Release notes
Open source →- #298 fix for passing a closed resource to Service parse or expect (@phil-davis)
-
2.2.1027 Aug 2024Release notes
Open source →2.2.10 (2024-08-27)
- #290 add cs-fixer v3 (@phil-davis)
Contains code style changes applied by php-cs-fixer major version 3.
No changes to behavior. -
2.2.926 Jul 2024Release notes
Open source →2.2.9 (2024-07-26)
- #287 Explicitly mark nullable parameter (@cedric-anne)
-
2.2.825 Jul 2024Release notes
Open source →2.2.8 (2024-07-25)
- #284 Add PHP 8.2 and 8.3 to CI for 2.2 branch (@phil-davis)
- #285 PHP 8.4 compliance (@phil-davis)
Release notes
Open source →- #284 Add PHP 8.2 and 8.3 to CI for 2.2 branch (@phil-davis)
- #285 PHP 8.4 compliance (@phil-davis)
-
2.2.718 Apr 2024Release notes
Open source →- #270 Fixed handling of elements from foreign namespaces in values object ( @mrbig )
-
2.2.628 Jun 2023 -
2.2.504 Nov 2021 -
2.2.403 Nov 2021Release notes
Open source →- #204 Use libxml version instead of PHP version before calling libxml_disable_entity_loader ( @CarlSchwan )
-
2.2.303 Oct 2020 -
2.2.203 Oct 2020Release notes
Open source →- #190: adjust libxml_disable_entity_loader calls ready for PHP 8.0 (@phil-davis)
-
2.2.111 May 2020Release notes
Open source →- #183: fixed warning 'xml cannot be empty while reading', which might lead to an infinite-loop (@mrow4a)
- #179, #178, #177 #176: several build/continuous integration related improvements (@phil-davis)
-
2.2.031 Jan 2020Release notes
Open source →- #171: Added Support for PHP 7.4, dropped Support for PHP 7.0 (@staabm, @phil-davis)
- #174: Update testsuite to phpunit8 (@phil-davis)
- Added phpstan coverage (@phil-davis)
- #144: Added a new
functionCallerdeserializer function for executing a callable when reading an XML element (@vsouz4)
-
2.1.314 Aug 2019 -
2.1.209 Jan 2019 -
2.1.109 Oct 2018Release notes
Open source →- #149: Properly detect xml parse errors in
parseCurrentElement()edge-cases
- #149: Properly detect xml parse errors in
-
2.1.008 Feb 2018Release notes
Open source →- #112: Added a
mixedContentdeserializer function, which might be useful if you're parsing HTML-like documents with elements that contain both text and other elements as siblings. (@staabm).
- #112: Added a
-
2.0.209 Oct 2018Nothing published for this version
-
2.0.1no dateNothing published for this version
-
2.0.016 Nov 2016Release notes
Open source →- Now requires PHP 7.
- Uses typehints everywhere.
- Fixed some minor strict typing-related issues.
- Removed workaround for PHP bug 64230.
-
1.5.109 Jan 2019Nothing published for this version
-
1.5.009 Oct 2016Release notes
Open source →- Now requires PHP 5.5.
- Using
finallyto always roll back the context stack when serializing. - #94: Fixed an infinite loop condition when reading some invalid XML documents.
-
1.4.219 May 2016Release notes
Open source →- The
contextStackin the Reader object is now correctly rolled back in error conditions (@staabm). - repeatingElements deserializer now still parses if a bare element name without clark notation was given.
$elementMapin the Reader now also supports bare element names.Service::expect()can now also work with bare element names.
- The
-
1.4.112 Mar 2016Release notes
Open source →- Parsing clark-notation is now cached. This can speed up parsing large documents with lots of repeating elements a fair bit. (@icewind1991).
-
1.4.014 Feb 2016Release notes
Open source →- Any array thrown into the serializer with numeric keys is now simply traversed and each individual item is serialized. This fixes an issue related to serializing value objects with array children.
- When serializing value objects, properties that have a null value or an empty array are now skipped. We believe this to be the saner default, but does constitute a BC break for those depending on this.
- Serializing array properties in value objects was broken.
-
1.3.029 Dec 2015Release notes
Open source →- The
Serviceclass adds a newmapValueObjectmethod which provides basic capabilities to map between ValueObjects and XML. - #61: You can now specify serializers for specific classes, allowing you
separate the object you want to serialize from the serializer. This uses the
$classMapproperty which is defined on both theServiceandWriter. - It's now possible to pass an array of possible root elements to
Sabre\Xml\Service::expect(). - Moved some parsing logic to
Reader::getDeserializerForElementName(), so people with more advanced use-cases can implement their own logic there. - #63: When serializing elements using arrays, the
valuekey in the array is now optional. - #62: Added a
keyValuedeserializer function. This can be used instead of theElement\KeyValueclass and is a lot more flexible. (@staabm) - Also added an
enumdeserializer function to replaceElement\Elements. - Using an empty string for a namespace prefix now has the same effect as
null.
- The
-
1.2.030 Aug 2015Release notes
Open source →- #53: Added
parseGetElements, a function likeparseInnerTree, except that it always returns an array of elements, or an empty array.
- #53: Added
-
1.1.029 Jun 2015Release notes
Open source →- #44, #45: Catching broken and invalid XML better and throwing
Sabre\Xml\LibXMLExceptionwhenever we encounter errors. (@stefanmajoor, @DaanBiesterbos)
- #44, #45: Catching broken and invalid XML better and throwing
-
1.0.026 May 2015Release notes
Open source →- No functional changes since 0.4.3. Marking it as 1.0.0 as a promise for API stability.
- Using php-cs-fixer for automated CS enforcement.
-
0.4.301 Apr 2015 -
0.4.221 Mar 2015Release notes
Open source →- Removed
constants.phpagain. They messed with PHPUnit and don't really provide a great benefit. - #41: Correctly handle self-closing xml elements.
- Removed
-
0.4.119 Mar 2015Release notes
Open source →- #40: An element with an empty namespace (xmlns="") is not allowed to have a prefix. This is now fixed.
-
0.4.019 Mar 2015Release notes
Open source →- Added
Sabre\Xml\Service. This is intended as a simple way to centrally configure xml applications and easily parse/write things from there. #35, #38. - Renamed 'baseUri' to 'contextUri' everywhere.
- #36: Added a few convenience constants to
lib/constants.php. Sabre\Xml\Util::parseClarkNotationis now in theSabre\Xml\Serviceclass.
- Added
-
0.3.109 Feb 2015 -
0.3.006 Feb 2015Release notes
Open source →- Added
$elementMapargument to parseInnerTree, for quickly overriding parsing rules within an element.
- Added
-
0.2.205 Feb 2015 -
0.2.117 Dec 2014Release notes
Open source →- LibXMLException now inherits from ParseException, so it's easy for users to catch any exception thrown by the parser.
-
0.2.005 Dec 2014Release notes
Open source →- Major BC Break: method names for the Element interface have been renamed
from
serializeXmlanddeserializeXmltoxmlSerializeandxmlDeserialize. This is so that it matches PHP'sJsonSerializableinterface. - #25: Added
XmlSerializableto allow people to write serializers without having to implement a deserializer in the same class. - #26: Renamed the
Sabre\XMLnamespace toSabre\Xml. Due to composer magic and the fact that PHP namespace are case-insensitive, this should not affect anyone, unless you are doing exact string matches on class names. - #23: It's not possible to automatically extract or serialize Xml fragments
from documents using
Sabre\Xml\Element\XmlFragment.
- Major BC Break: method names for the Element interface have been renamed
from
-
0.1.024 Nov 2014Release notes
Open source →- #16: Added ability to override
elementMap,namespaceMapandbaseUrifor a fragment of a document during reading and writing usingpushContextandpopContext. - Removed:
Writer::$contextandReader::$context. - #15: Added
Reader::$baseUrito matchWriter::$baseUri. - #20: Allow callbacks to be used instead of
Elementclasses in theReader. - #25: Added
readTextto quickly grab all text from a node and advance the reader to the next node. - #15: Added
Sabre\XML\Element\Uri.
- #16: Added ability to override
-
0.0.626 Sep 2014Release notes
Open source →- Added:
CDataelement. - #13: Better support for xml with no namespaces. (@kalmas)
- Switched to PSR-4 directory structure.
- Added:
-
0.0.527 Mar 2013Release notes
Open source →- Added: baseUri property to the Writer class.
- Added: The writeElement method can now write complex elements.
- Added: Throwing exception when invalid objects are written.
-
0.0.414 Mar 2013Release notes
Open source →- Fixed: The KeyValue parser was skipping over elements when there was no whitespace between them.
- Fixed: Clearing libxml errors after parsing.
- Added: Support for CDATA.
- Added: Context properties.
-
0.0.322 Feb 2013Release notes
Open source →- Changed: Reader::parse returns an array with 1 level less depth.
- Added: A LibXMLException is now thrown if the XMLReader comes across an error.
- Fixed: Both the Elements and KeyValue parsers had severe issues with nesting.
- Fixed: The reader now detects when the end of the document is hit before it should (because we're still parsing an element).
-
0.0.217 Feb 2013Release notes
Open source →- Added: Elements parser.
- Added: KeyValue parser.
- Change: Reader::parseSubTree is now named parseInnerTree, and returns either a string (in case of a text-node), or an array (in case there were child elements).
- Added: Reader::parseCurrentElement is now public.