Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
PHP Object to XML Mapping (OXM)
branch: master
Failed to load latest commit information.
bin Fix bin.
lib Change license from LGPL to MIT.
tests Change license from LGPL to MIT.
.gitignore [Tests] Moved phpunit.xml to project root
.gitmodules Rebase vendor
.travis.yml Add composer.json and .travis.yml
LICENSE Change license from LGPL to MIT.
README.markdown General code cleanup. Added some missing static exceptions.
build.xml Fixed ant build to use new phpunit.xml.dist by default
composer.json Add composer.json and .travis.yml
doctrine-mapping.xsd Introduced value node and @XmlValue annotation.


Doctrine 2 OXM

Doctrine OXM is a PHP 5.3 project for PHP object to XML mapping that provides support for persisting the XML to a file system via common Doctrine techniques.

Note: This project is still in it's infancy and should not be used for any production related code. Its API is still quite unstable and not all features are yet implemented. Any help in advancing the project forward would be welcome. Let the forking begin!


Based on the EntityManager of the Doctrine 2 ORM project. Objects mapped as an @XmlRootEntity may be managed by the XmlEntityManager. As these objects are persisted, they are saved in XML format to the file system under a user configured directory and naming scheme.

$user = new User();
$user->setName("Malcolm Reynolds");
$user->setOccupation("Space Cowboy");

$em->flush();            // saves marshalled user object as XML to the file system.

The XmlEntityManager also allows access to repository type objects for loading entities back again.

$user = $em->getRepository("User")->findById(1);

Xml Marshallers

OXM also provides first class support for the Marshalling and Unmarshalling of PHP Objects to XML and vice-versa based on ideas within the Java Castor XML mapping project. Class metadata for mapped class may be configured via @Annotations, XML, Yaml, or even PHP itself. Marshallers will uses this class metadata to convert your defined objects to XML, as well as reading in XML and converting them to objects.

The behavior of the marshalling and unmarshalling process is completely configurable by the defined class metadata. You can specify the exact xml names for each element, and how they map to the fields of your class. XML attributes, elements, and "text" nodes are all supported, as well as collections.

Marshallers are utilized by the XmlEntityManager internally, but are also provided to be used as first class citizens within your code for whatever you need. This makes working with XML in your application so much easier because you don't really have to think about it anymore!

Example use case:

$xml = $this->getRequest()->getParam('posted_xml');

$order = $marshaller->unmarshalFromString($xml);
$this->view->message = "Order recieved:  " . $order->getId();

$update = new UpdateNotification("Order " . $order->getId() . " was received by the application");
$xml = $marshaller->marshalToString($update);


Run tests

Install PHPUnit (>= 3.5)

Copy the phpunit.xml

cp ./phpunit.xml.dist ./phpunit.xml

Run the tests

phpunit ./tests


Something went wrong with that request. Please try again.