{"id":123,"date":"2012-05-26T21:39:08","date_gmt":"2012-05-27T01:39:08","guid":{"rendered":"http:\/\/www.lektrikpuke.com\/blog\/?p=123"},"modified":"2012-05-30T22:50:08","modified_gmt":"2012-05-31T02:50:08","slug":"parsing-xml-with-php-simplexml","status":"publish","type":"post","link":"https:\/\/lektrikpuke.com\/blog\/2012\/05\/26\/parsing-xml-with-php-simplexml\/","title":{"rendered":"Parsing XML With PHP SimpleXML"},"content":{"rendered":"<p>Needed to stay busy (a long story) and figured I&#8217;d kill two birds with one stone, so I parsed some XML for a friend I used to work with. PHP is my favorite scripting language, so of course I opted to use that. Researching this on the internet I came across simpleXML. Unfortunately, I can be slow at times, and I had to look at a lot of articles across the interweb. The one that finally helped to make things click was at this page: <a href=\"http:\/\/fuelyourcoding.com\/reading-xml-with-php\/\" target=\"_blank\">Reading XML with PHP<\/a><\/p>\n<p>Anyway, I was having issues with namespaces (perhaps another blog entry) and cheated by stripping the XML of all namespace references. So, the sample XML has no namespaces, and has been rewritten to protect the innocent (and maybe to help someone else).\u00a0 Also, the sample is many nodes deep, something that seems to be lacking in most examples I&#8217;ve run across.<\/p>\n<p>Sample XML:<\/p>\n<pre style=\"font-size: small; line-height: 1.1em;\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;topLevel&gt;\r\n\u00a0 &lt;somethingHere&gt;text,text,text&lt;\/somethingHere&gt;\r\n\u00a0 &lt;troll&gt;SUBMARINE&lt;\/troll&gt;\r\n\u00a0 &lt;statement&gt;HELLO&lt;\/statement&gt;\r\n\u00a0 &lt;secondLevel&gt;\r\n\u00a0\u00a0\u00a0 &lt;thirdLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;firstNumber&gt;1234567&lt;\/firstNumber&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;whatIsTruth&gt;true&lt;\/whatIsTruth&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;statement&gt;GiveMeLiberty&lt;\/statement&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fifthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;sixthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;number&gt;7654321&lt;\/number&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;statement&gt;or&lt;\/statement&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;someLevelDate&gt;05-26-2012&lt;\/someLevelDate&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;seventhLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;eighthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;animal&gt;ELEPHANT&lt;\/animal&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;minorType&gt;1ACB&lt;\/minorType&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;troubleOptionCode&gt;LAMP&lt;\/troubleOptionCode&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;!-- Linux - Thanks Linus --&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;statement&gt;OrGiveMe&lt;\/statement&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_A1&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_A2&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_A3&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_A4&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_A5&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_A6&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/ninthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/eighthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;eighthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;animal&gt;FISH&lt;\/animal&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;minorType&gt;2DEF&lt;\/minorType&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;troubleOptionCode&gt;WAMP&lt;\/troubleOptionCode&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;!-- Windows --&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;statement&gt;Death&lt;\/statement&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_B1&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_B2&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_B3&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/ninthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/eighthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;eighthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;animal&gt;BIRD&lt;\/animal&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;minorType&gt;UCLA&lt;\/minorType&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;troubleOptionCode&gt;MAMP&lt;\/troubleOptionCode&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;!-- Mac --&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;statement&gt;3ACTIVE3&lt;\/statement&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_C1&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;ninthLevelChild&gt;9LC_C2&lt;\/ninthLevelChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/ninthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/eighthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/seventhLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/sixthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/fifthLevelA&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;topLevelAddresses&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;address&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;city&gt;Colchester&lt;\/city&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;addressChild&gt;CT&lt;\/addressChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;postalCode&gt;06415&lt;\/postalCode&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/address&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/topLevelAddresses&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/fourthLevelA&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/thirdLevelA&gt;\r\n\u00a0\u00a0\u00a0 &lt;thirdLevelB&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelB&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelBChild&gt;4child_1&lt;\/fourthLevelBChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;notDate&gt;05-26-2012&lt;\/notDate&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/fourthLevelB&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelB&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelBChild&gt;4child_2&lt;\/fourthLevelBChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;notDate&gt;05-26-2012&lt;\/notDate&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/fourthLevelB&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelB&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelBChild&gt;4child_3&lt;\/fourthLevelBChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;notDate&gt;05-26-2012&lt;\/notDate&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/fourthLevelB&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelB&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fourthLevelBChild&gt;4child_4&lt;\/fourthLevelBChild&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;notDate&gt;05-26-2012&lt;\/notDate&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/fourthLevelB&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/thirdLevelB&gt;\r\n\u00a0 &lt;\/secondLevel&gt;\r\n&lt;\/topLevel&gt;<\/pre>\n<div style=\"clear: both;\">And now the PHP with comments (NOTE: My coding is not bullet proof. Use at your own risk. Also, as with many languages, there are many ways to do the same thing in PHP. I&#8217;m not saying I did it the best or most efficient way, just that it worked for me. If it helps you, all the better.):<\/div>\n<pre style=\"font-size: small; line-height: 1.1em;\">&lt;?php\r\n$file_location = 'idz\/test\/';\r\n\r\n$csvList = \"xmlName\\tTrans\\tStatement\\tFirst#\\tsixthLevelAChild#\\tAnimalTypes\\tDiffTypes\\t4thLevelBChildren\\tninthLevel\\r\\n\"; \/\/ write column names - tab delimited list\r\n\r\n$idArray = array(\"1xml.xml\"); \/\/ I saved the XML above as 1xml.xml in the idz\/test\/ folder relative to the script\r\n$idArrayCount = count($idArray);\r\n\r\nforeach($idArray as $value){ \/\/ for every value in the array - just in case I have a list\r\n\u00a0\u00a0 \u00a0$file_name = str_replace('.xml', '', $value); \/\/ strip off .xml\r\n\u00a0\u00a0 \u00a0$url = $file_location . $value; \/\/ concat file location (what folder the files are in) and file\r\n\r\n\u00a0\u00a0 \u00a0$csvList .= $file_name . \"\\t\";\r\n\r\n\u00a0\u00a0 \u00a0if(!$xml=simplexml_load_file($url)){ \/\/ try to load file\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0trigger_error('Error reading XML file',E_USER_ERROR); \/\/ if file fails to load outputs error message (on my computer in the php error file)\r\n\u00a0\u00a0 \u00a0} \/\/ end if not load file\r\n\r\n\u00a0\u00a0 \u00a0$level4A = $xml-&gt;secondLevel-&gt;thirdLevelA-&gt;fourthLevelA; \/\/ make a shortcut to fouthLevelA (to cut down on line length in some instances)\r\n\u00a0\u00a0 \u00a0$eighthLevelA = $level4A-&gt;fifthLevelA-&gt;sixthLevelA-&gt;seventhLevelA-&gt;eighthLevelA; \/\/ make a shortchut to eighthLevelA using $level4A and remaining xpath\u00a0\u00a0 \u00a0\r\n\r\n\u00a0\u00a0 \u00a0$eighthLevelCount = count($eighthLevelA); \/\/ count occurrences of eighth level nodes\r\n\u00a0\u00a0 \u00a0$fourthLevelBCount = count($xml-&gt;secondLevel-&gt;thirdLevelB-&gt;fourthLevelB); \/\/ count occurrences of fourth level B nodes\r\n\r\n\u00a0\u00a0 \u00a0$csvList .= $xml-&gt;troll . \"\\t\" . $level4A-&gt;statement . $eighthLevelA[0]-&gt;statement . $eighthLevelA[1]-&gt;statement . \"\\t\" . $level4A-&gt;firstNumber . \"\\t\" . $level4A-&gt;fifthLevelA-&gt;sixthLevelA-&gt;number . \"\\t\";\r\n\r\n\u00a0\u00a0 \u00a0for($i = 0; $i &lt; $eighthLevelCount; $i++){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$csvList .= $eighthLevelA[$i]-&gt;animal . \" \";\r\n\u00a0\u00a0 \u00a0} \/\/ end for i less than 8th level count\r\n\u00a0\u00a0 \u00a0$csvList .= \"\\t\";\r\n\r\n\u00a0\u00a0 \u00a0for($i = 0; $i &lt; $eighthLevelCount; $i++){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$csvList .= $eighthLevelA[$i]-&gt;minorType . \" \";\r\n\u00a0\u00a0 \u00a0} \/\/ end for i less than 8th level count\r\n\u00a0\u00a0 \u00a0$csvList .= \"\\t\";\r\n\r\n\u00a0\u00a0 \u00a0$fourthLevelB = $xml-&gt;secondLevel-&gt;thirdLevelB-&gt;fourthLevelB;\r\n\u00a0\u00a0 \u00a0for($i = 0; $i &lt; $fourthLevelBCount; $i++){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$csvList .= $fourthLevelB[$i]-&gt;fourthLevelBChild . \" \";\r\n\u00a0\u00a0 \u00a0} \/\/ end for i less than 4th level count\r\n\u00a0\u00a0 \u00a0$csvList .= \"\\t\";\r\n\r\n\u00a0\u00a0 \u00a0\/\/ I used the var name troublecount because it was a bit of trouble figuring out the embedded loop\r\n\u00a0\u00a0 \u00a0for($i = 0; $i &lt; $eighthLevelCount; $i++){ \/\/ loop up to count of eighth level nodes\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$troubleCount[$i] = count($eighthLevelA[$i]-&gt;ninthLevelA-&gt;ninthLevelChild); \/\/ count children of ninth level of this eightLevelA node\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for($j = 0; $j &lt; $troubleCount[$i]; $j++){ \/\/ loop up to count of ninth level children\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$csvList .= $eighthLevelA[$i]-&gt;ninthLevelA-&gt;ninthLevelChild[$j] . \" \"; \/\/ concatenate ninth level children to list\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0} \/\/ end for j less than trouble count\r\n\u00a0\u00a0 \u00a0} \/\/ end for i less than 8th level count\r\n\u00a0\u00a0 \u00a0$csvList .= \"\\r\\n\"; \/\/ end of line (in Microsoft OS)\r\n} \/\/ end foreach idArray\r\n\r\necho $csvList;\r\n?&gt;<\/pre>\n<p><a title=\"Click Here To Download Example XML And Code\" href=\"http:\/\/www.lektrikpuke.com\/misc\/web-parse-xml.zip\" target=\"_blank\">Click Here To Download Example XML And Code<\/a><\/p>\n<p>Output when code run on sample xml (tab delimited):<\/p>\n<pre id=\"line1\" style=\"font-size: small; line-height: 1.1em;\">xmlName\tTrans\tStatement\tFirst#\tsixthLevelAChild#\tAnimalTypes\tDiffTypes\t4thLevelBChildren\tninthLevel\r\n1xml\tSUBMARINE\tGiveMeLibertyOrGiveMeDeath\t1234567\t7654321\tELEPHANT FISH BIRD \t1ACB 2DEF UCLA \t4child_1 4child_2 4child_3 4child_4 \t9LC_A1 9LC_A2 9LC_A3 9LC_A4 9LC_A5 9LC_A6 9LC_B1 9LC_B2 9LC_B3 9LC_C1 9LC_C2<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Needed to stay busy (a long story) and figured I&#8217;d kill two birds with one stone, so I parsed some XML for a friend I used to work with. PHP is my favorite scripting language, so of course I opted &hellip; <a href=\"https:\/\/lektrikpuke.com\/blog\/2012\/05\/26\/parsing-xml-with-php-simplexml\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[72],"tags":[6,89,131,132],"class_list":["post-123","post","type-post","status-publish","format-standard","hentry","category-computer-stuff","tag-php","tag-script","tag-simplexml","tag-xml"],"_links":{"self":[{"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/posts\/123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":22,"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/posts\/123\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/posts\/123\/revisions\/149"}],"wp:attachment":[{"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/media?parent=123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/categories?post=123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lektrikpuke.com\/blog\/wp-json\/wp\/v2\/tags?post=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}