byjg / xmlutil
A utility class to make easy work with XML in PHP.
Fund package maintenance!
byjg
Installs: 109 327
Dependents: 3
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 1
Open Issues: 1
Requires
- php: >=7.4
- ext-xml: *
Requires (Dev)
- phpunit/phpunit: ^9.5
README
A utility class to make easy work with XML in PHP
Create a new XML Document and add nodes
use ByJG\Util\XmlUtil; $xml = XmlUtil::createXmlDocumentFromStr('<root />'); $myNode = XmlUtil::createChild($xml->documentElement, 'mynode'); XmlUtil::createChild($myNode, 'subnode', 'text'); XmlUtil::createChild($myNode, 'subnode', 'more text'); $otherNode = XmlUtil::createChild($myNode, 'othersubnode', 'other text'); 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 = XmlUtil::xml2Array($xml);
Select a single node based on XPath
$node = XmlUtil::selectSingleNode($xml, '//subnode');
Select all nodes based on XPath
$nodeList = XmlUtil::selectNodes($myNode, '//subnode');
Working with xml namespaces
Add a namespace to the document
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
XmlUtil::createChild($xml->documentElement, 'my:othernodens', 'teste');
Add a node with a namespace
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"
Running the Tests
vendor/bin/phpunit