Say you have a file with a bunch of nice-xml documents inside and you want them all as individual files. I come across this problem quite often so I thought it would be a good idea to have a script here showing how I usually sole this problem (PHP >= 4.3).
<?php
//Check the number of arguments
if($argc != 5){
echo "Usage: splitxml <filename> <starttag> <endtag> <path>n";
echo "<filename> - filename of file with xmls inn";
echo "<starttag> - first tag of the xml you want to extractn";
echo "<endtag> - last tag of the xml you want to extractn";
echo "<path> - where you want the files to be created";
exit();
}
// Read file into an array
$xml = file($argv[1]);
$starttag = $argv[2];
$endtag = $argv[3];
$resultpath = $argv[4];
$tmp = array();
$counter = 0;
$recording = false;
foreach($xml as $row){
// Found start tag - start "recording"
if(strpos($row, $starttag) !== false){
$recording = true;
}
// Save all rows if "recording"
if($recording){
$tmp[] = $row;
}
// Found end tag - stop "recording" and save file
if(strpos($row, $endtag) !== false){
$fp = fopen($resultpath.'/file'.$counter++.'.xml', 'w');
fwrite($fp, implode("",$tmp));
fclose($fp);
$tmp = array();
$recording = false;
}
}
?>
Here is an example of how the file can look (books.xml):
--------------------
<book>
<title>Ronja</title>
<author>Astrid Lindgren</author>
</book>
--------------------
<book>
<title>Barnen i Bullerbyn</title>
<author>Astrid Lindgren</author>
</book>
--------------------
To get these book xml into separate files just run the above script with the following parameters:
php splitxml books.xml '' '' books/
This will create the files file0.xml and file1.xml in the directory books/
file0.xml:
<book>
<title>Ronja</title>
<author>Astrid Lindgren</author>
</book>
file1.xml:
<book>
<title>Barnen i Bullerbyn</title>
<author>Astrid Lindgren</author>
</book>