ManiaLib\XML
, (*1)
ManiaLib\XML is an object-oriented PHP library for writing XML., (*2)
Installation
Install via Composer:, (*3)
{
"require": {
"maniaplanet/manialib-xml": "0.2.*@dev"
}
}
Features
- Simple and flexible object-oriented architecture
- Configurable rendering drivers
- Symfony\Component\EventDispatcher integration
Architecture
- You construct a tree of
ManiaLib\XML\Node
.
- Setter methods return the element for chaining (eg.
$node->setNodeName('foo')->setNodeValue('bar');
.
-
ManiaLib\XML\Node::create()
instanciates the object and returns it for easy chaining (eg. Node::create()->setNodeName('foo');
).
- If you're running PHP 5.4+ you can use class member access on instantiation instead eg.
(new Node)->setNodeName('foo');
.
- See
ManiaLib\XML\NodeInterface
for reference.
- You then pass the root
Node
to an instance of ManiaLib\XML\Rendering\Renderer
.
Examples
<?php
use ManiaLib\XML\Node;
use ManiaLib\XML\Rendering\Renderer;
require_once '../vendor/autoload.php';
// Let's build a Node tree. Here is the root element.
$root = Node::create()
->setNodeName('rootElement')
->setAttribute('rootAttrivute', '1.0');
// This is one way to append child, ie. "append this element to its parent"
Node::create()
->setNodeName('someElement')
->setAttribute('someAttribute', 'foo')
->setAttribute('otherAttribute', 'bar')
->setNodeValue('Hello world')
->appendTo($root);
// This is another way, ie. "appends a child to this element"
$node = Node::create()->setNodeName('anotherOne');
$root->appendChild($node);
// Let's render the tree
$renderer = new Renderer();
$renderer->setRoot($root);
echo $renderer->getXML();
It will output:, (*4)
<rootElement rootAttrivute="1.0">
<someElement someAttribute="foo" otherAttribute="bar">
Hello world
</someElement>
<anotherOne/>
</rootElement>
More in /examples directory, (*5)
Tests
A simple suite tests .php files in the /examples directory against their associated .xml renders. To run the tests we recommand:
* PHPUnit system-wide installation via Composer
* Run composer install
* Run phpunit
, (*6)
Todo
- XMLComment
- PhpDoc
- Raw node value
- Other unsupported Node features?