Skip to content

Latest commit

 

History

History
145 lines (114 loc) · 3.21 KB

README.md

File metadata and controls

145 lines (114 loc) · 3.21 KB

PHP XML lib

Handy wrapper for the PHP DOM, XPath and XSLTProcessor

Manual is under construction.

Examples

$xml = new \pgood\xml\xml('demo.xml');

//get string value (xpath)
$title = $xml->evaluate('string(/catalog/book[@id="bk103"]/title)');

//get dom element (xpath)
$element = $xml->query('//book[2]')->item(0);

//get subelement value (xpath)
$price = $element->evaluate('number(price)');
//or
$price = $xml->evaluate('number(price)',$element);

//get attribute
$oldId = $element->id;
//or
$oldId = $element->getAttribute('id');

//remove attribute
$element->id = null;
//or
$element->removeAttribute('id');

//set attribute
$element->id = 'newId';
//or
$element->setAttribute('id','newId');

//set text content
$element->text('new text content');

//get text content
$element->text();

//append new element
$newElem = $element->append('new-element');

//move queryed element before 
$newElem->before($xml->query('//book[3]')->item(0));

//move queryed element after new one
$newElem->after($xml->query('//book[1]')->item(0));

//get previous element
$newElem->prev();

//get next element
$newElem->next();

//get DOMElement object
$newElem->e();

//get parent
$newElem->parent();

//remove element
$newElem->remove();

//save changes
$xml->save();

//get PHP DOMDocument
$dd = $xml->dd();

//get root element
$documentElement = $xml->de();

/*
 * XSLT Transformation
 */
$tpl = new \pgood\xml\template('tpl.xsl');
echo $tpl->transform($xml);

/*
 * XML from scratch
 */
$xml = new \pgood\xml\xml();
$xml->de('root-element-name');

//using the xml::create method for element creation
$newElement1 = $xml->de()->append($xml->create(
		'child-element-tag-name'
		,array(
			'attr-name-1' => 'value for first attribute'
			,'attr-name-2' => 'value for second attribute'
		)
		,'element text content'
	));

//lazy element creation
$newElement2 = $xml->de()->append('child-element-tag-name');
$newElement2->{'element-id'} = 'id value';

//catch up an existed DOMDocument
$xml2 = new \pgood\xml\xml($newElement2);

//new XML from inline code
$xml = new \pgood\xml\xml('<?xml version="1.0" encoding="utf-8"?><data>content</data>');

//parse HTML
$xml->loadHTML('<html><head><tile>Hello World!</title></head><body><h1>Hello World!</h1></body></html>');

//save
$xml->save('new-file-name.xml');

/*
 * XPath and namespace
 * Let's count media:content elements in Yahoo RSS feed
 */
$xml = new \pgood\xml\xml('https://www.yahoo.com/news/rss/');
$xml->registerNameSpace('media','http://search.yahoo.com/mrss/');
$numElemets = $xml->evaluate('count(//media:content)');

demo.xml

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
	<book id="bk101">
		<author>Gambardella, Matthew</author>
		<title>XML Developer's Guide</title>
		<genre>Computer</genre>
		<price>44.95</price>
		<publish_date>2000-10-01</publish_date>
		<description>An in-depth look at creating applications with XML.</description>
	</book>
	<book id="bk102">
		<author>Ralls, Kim</author>
		<title>Midnight Rain</title>
		<genre>Fantasy</genre>
		<price>5.95</price>
		<publish_date>2000-12-16</publish_date>
		<description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description>
	</book>
	<!-- ... -->
</catalog>