PHP simple XML parsing

January 12th, 2010

Little example of using PHP and XPath to grab values from simplistic XML structure. Requires PHP5+


<?
// the xml would be read somewhere, or sent in the request
$xml = <<<XML
<order>
<header>
<transactionDate>01/01/2010</transactionDate>
<client>elmer fudd</client>
</header>
<defendants>
<defendant>
<name>Bugs Bunny</name>
<addresses>
<address>
<line1>555 Elm Street</line1>
<line2 />
<city>Elk Grove</city>
<state>IL</state>
<zip>55555</zip>
</address>
<address>
<line1>555 Lake Shore Dr</line1>
<line2>Apt 201</line2>
<city>Chicago</city>
<state>IL</state>
<zip>55555</zip>
</address>
</addresses>
</defendant>
<defendant>
<name>Daffy Duck</name>
<addresses>
<address>
<line1>555 Elm Street</line1>
<line2 />
<city>Elk Grove</city>
<state>IL</state>
<zip>55555</zip>
</address>
</addresses>
</defendant>
</defendants>
</order>
XML;

$xmlDoc = new SimpleXMLElement($xml);
($transactionDate = $xmlDoc->xpath('/order/header/transactionDate')) || die ('invalid: missing transaction date');
echo 'Transaction Date: ' . $transactionDate[0] . '<br/>';

$nodes = $xmlDoc->xpath('/order/defendants/defendant');
foreach ($nodes as $node)
{
//print_r($node);
echo '<br>';
echo $node->name . '<br/>';
//print_r($node->addresses);
foreach($node->addresses->address as $addr)
{
echo $addr->line1 . '<br/>';
echo $addr->line2 . '<br/>';
echo $addr->city . '<br/>';
echo $addr->state . '<br/>';
echo $addr->zip . '<br/>';
}

}

?>