maniaplanet / manialib-xml
Object-oriented PHP library for writing XML.
Installs: 10 662
Dependents: 3
Suggesters: 0
Security: 0
Stars: 0
Watchers: 9
Forks: 0
Open Issues: 0
Requires
- php: >=5.3
This package is auto-updated.
Last update: 2022-02-01 12:35:29 UTC
README
ManiaLib\XML is an object-oriented PHP library for writing XML.
Installation
{ "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 ofManiaLib\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:
<rootElement rootAttrivute="1.0"> <someElement someAttribute="foo" otherAttribute="bar"> Hello world </someElement> <anotherOne/> </rootElement>
More in /examples directory
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
Todo
- XMLComment
- PhpDoc
- Raw node value
- Other unsupported Node features?