Engineer, Musician, Photographer

Prior to Jaxl v3.x, the most ugliest piece of code inside Jaxl library was handling of XML packets. If you are working with XMPP protocol which is all about sending and receiving XML packets, it can become a nightmare if you don’t have a proper XML manipulation library in your toolkit. For Jaxl v3.x, first thing I decided to write was JAXLXml class, which is a custom XML packet implementation with no external dependencies and is an extension over the ideas from Strophe.Builder class written by Jack Moffitt.

JAXLXml is generic enough to find a place inside any PHP application that requires easy and elegant XML packet creation. In this blog post, I will give an exhaustive overview of how to create XML packets using JAXLXml class.

JAXLXml Constructor
Depending upon the need, there are several different ways of initializing a JAXLXml object:

$xml_obj = new JAXLXml($name, $ns, $attrs, $text);

$xml_obj = new JAXLXml($name, $ns, $attrs);

$xml_obj = new JAXLXml($name, $ns, $text);

$xml_obj = new JAXLXml($name, $attrs, $text);

$xml_obj = new JAXLXml($name, $attrs);

$xml_obj = new JAXLXml($name, $ns);

$xml_obj = new JAXLXml($name);

where:

$name – the XML node name

$ns – the XML namespace

$attrs – Key-Value (KV) pair of XML attributes

$text – XML content

Here are a few examples for each constructor style shown above:

JAXLXml will sanitize attributes and text values as shown below:

Manipulating Attributes, Child Nodes and Content
Below is an exhaustive list of methods available over initialized JAXLXml object $xml_obj for manipulating attributes, child nodes and content:

c($name, $ns=null, $attrs=array(), $text=null) : Append a child node at current rover and update the rover to point at newly added child node. Rover is nothing but a pointer indicating the level in the XML tree where this and other methods will perform. When an JAXLXml instance is initialized, rover points to the top level node.

cnode($node) : Append a child node given by $node (a JAXLXml object) at current rover and update the rover to point at newly added child node.

t($text, $append=FALSE) : Update text of the node pointed by current rover

top() : Move rover back to the top in the XML tree

up() : Move rover one step up the XML tree

attrs($attrs) : Merge new attributes specified as KV pair $attrs with existing attributes at the current rover.

match_attrs($attrs) : Accepts a KV pair of attributes $attrs, return bool if all keys exist and have same value as specified in the passed KV pair.

exists($name, $ns=null, $attrs=array()) : Checks if a child with $name exist. If found, return matching child as JAXLXml object otherwise false. If multiple children exist with same name, this function will return on first matching child