PHP Classes
elePHPant
Icontem

PHP Merge XML: Merge XML sources from strings, files, DOM objects

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Info   View files View files (7)   DownloadInstall with Composer Download .zip   Reputation   Support forum (1)   Blog    
Last Updated Ratings Unique User Downloads Download Rankings  
2015-06-11 (21 days ago) RSS 2.0 feedNot enough user ratingsTotal: 355 This week: 3All time: 6,353 This week: 398Up
Version License PHP version Categories  
merge-xml 1.0.3BSD License5.2XML, PHP 5
Description Author  

This class can merge XML sources from strings, files or DOM objects.

It can take a XML document from a string, a file or a DOM object tree and merges with another XML document.

The resulting document can be searched using a XPath query string or returned as a string or a DOM object.

This class provides options to control whether the nodes with the same path or name are replaced or added sequentially.

Innovation Award  
PHP Programming Innovation award nominee
May 2014
Number 5


Prize: One downloadable e-book of choice by O'Reilly
PHP has extensive support to parse and generate XML documents.

This class extends that support by making it easier to merge XML nodes from multiple documents.

Manuel Lemos
Picture of Vallo Reima
Name: Vallo Reima is available for providing paid consulting. Contact Vallo Reima .
Classes: 3 packages by
Country: Estonia Estonia
Age: 57
All time rank: 24489 in Estonia Estonia
Week rank: 323 Up2 in Estonia Estonia Up
Innovation award
Innovation award
Nominee: 1x

Details provided by the author  
PHP MergeXML class
==================

The class allows to merge the XML sources (files, strings, objects) into single DOM XML object.
The merging is performed recursively on the node level adding new elements and replacing existing ones.
The nodes with the same path/name are replaced/added sequentially and the modification can be controlled by the options.

MergeXML could be useful in cases where it is necessary to gather XML data from multiple sources.
For example, to join the configuration files of different subsystems depending on the system operation. 

The usage
---------

**$oMX = new MergeXML([$opts]);**

$opts - the options array:

- join - common root name if any source has different root name (default is *root*, specifying *false* denies different names)
- updn - traverse the nodes by name sequence (*true*, default) or overall sequence (*false*)
- stay - use the *stay* attribute value to deny overwriting of specific node (default is *all*, can be array of values, string or empty)
- clone - use the *clone* attribute value to clone specific nodes if they already exists (empty by default, can be array of values, string or empty)

**$oMX->AddFile($file)**;

> $file - XML file's pathed name

**$oMX->AddSource($source)**;

> $source - XML string or DOM object

The methods merge a sequent source and return the final object or *false* if failed (see *error* property below).

You can search in the result object:

**$oMX->Query($expr)**;

> $expr - XPath query expression

You can get the XML result tree:

**$oMX->Get([0|1|2])**;

- 0 - object (default)
- 1 - text
- 2 - html

The result object can be accessed also via *$oMX->dom* property. The properties available:

- **dom** - result XML DOM object
- **dxp** - result XPath object
- **nsp** - namespaces array (prefix => URI)
- **count** - number of sources merged
- **error** - error information
 - error->code ('' is ok)
 - error->text

The sources must have the same default namespace (if have at all).
Prefix '_' is reserved to handle default namespace.

The package
-----------

The following files are included:

1. *mergexml.php* - the MergeXML class; requires PHP 5.2+;
2. *example.html* - client-side to select the xml files and display result;
3. *example.php* - server-side to receive & pass the xml data and return result;
4. *test1.xml, test2.xml* - test data for the example.

The MergeXML is realized also in JavaScript (see [github.com]).

ChangeLog
---------

22 May 2014

- *mergexml.php*
 - *stay* parameter is added for *AddFile* and *AddSource* methods
 - *NameSpaces* method is added to register/xpath 1st (single) source

11 July 2014

- *mergexml.php*
 - *clone* parameter is added for *AddFile* and *AddSource* methods (Pedro Carrazco)

  [github.com]: http://www.github.com/hareko/js-merge-xml
  Files folder image Files  
File Role Description
Accessible without login Plain text file example.html Data Sample output
Accessible without login Plain text file example.php Example Example script
Accessible without login Plain text file LICENSE Lic. License text
Plain text file mergexml.php Class Class source
Accessible without login Plain text file README.md Doc. Documentation
Accessible without login Plain text file test1.xml Data Auxiliary data
Accessible without login Plain text file test2.xml Data Auxiliary data

 Version Control Unique User Downloads Download Rankings  
 100%Total:355All time:6,353
 This week:3This week:398Up
 User Comments (1)  
 
This is a good class ;-)
1 year ago (Josť Filipe Lopes Santos)
80%StarStarStarStarStar