XmlUtil
A utility class to make easy work with XML in PHP
Create a new XML Document and add nodes
$xml = \ByJG\Util\XmlUtil::createXmlDocumentFromStr('<root />');
$myNode = \ByJG\Util\XmlUtil::createChild($xml->documentElement, 'mynode');
\ByJG\Util\XmlUtil::createChild($myNode, 'subnode', 'text');
\ByJG\Util\XmlUtil::createChild($myNode, 'subnode', 'more text');
$otherNode = \ByJG\Util\XmlUtil::createChild($myNode, 'othersubnode', 'other text');
\ByJG\Util\XmlUtil::addAttribute($otherNode, 'attr', 'value');
will produce the follow xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<mynode>
<subnode>text</subnode>
<subnode>more text</subnode>
<othersubnode attr="value">other text</othersubnode>
</mynode>
</root>
Convert to array
$array = \ByJG\Util\XmlUtil::xml2Array($xml);
Select a single node based on XPath
$node = \ByJG\Util\XmlUtil::selectSingleNode($xml, '//subnode');
Select all nodes based on XPath
$nodeList = \ByJG\Util\XmlUtil::selectNodes($myNode, '//subnode');
Working with xml namespaces
Add a namespace to the document
\ByJG\Util\XmlUtil::addNamespaceToDocument($xml, 'my', 'http://www.example.com/mytest/');
will produce
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:my="http://www.example.com/mytest/">
...
</root>
Add a node with a namespace prefix
\ByJG\Util\XmlUtil::createChild($xml->documentElement, 'my:othernodens', 'teste');
Add a node with a namespace
\ByJG\Util\XmlUtil::createChild($xml->documentElement, 'nodens', 'teste', 'http://www.example.com/mytest/');
Bonus - CleanDocument
XmlUtil have a class for selectively remove specific marks (tags) from the document or remove all marks.
Example:
<?php
$document = new \ByJG\Util\CleanDocument($documentXmlOrHtml);
$document
->removeContentByTag('a', 'name')
->removeContentByProperty('src')
->stripTagsExcept(['img'])
->get();
Install
composer require "byjg/xmlutil=1.0.*"