If you need to use XML with PHP, look no further than the awesome <phpXML> class written by Michael P. Mehl, available from http://www.phpxml.org.
Why? Because it allows you to use the XPath expression syntax to access data. WAY easier than mucking around with, say the DOM.
An example of XPath's functionality: say I have a CDATA tag called "ACCOUNT" which I wish to know the value of. In XPath, this is written "//ACCOUNT". For an awesome tutorial on using XPAth, go to http://www.zvon.org/xxl/XPathTutorial/General/examples.html
Unfortunately, there is only limited information available on how to actually use <phpXML>, and none of it is particularly user-friendly. I searched high and wide for a simple tutorial, but to no avail. So here it is!
<?
include('xml.php');
$xml = new XML('test.xml');
// Evaluate the XPath expression.
$zzz = $xml->evaluate('//ACCOUNT', '');
//aliter: to output all CDATA values in the XML
// $zzz = $xml->evaluate('//*', '');
// Now display the content of the XML file.
foreach($zzz as $result)
{
$final = $xml->get_content($result);
echo "Value:$final
";
}
$final=$xml->get_file($zzz);
?>
Here's the example XML file (test.xml)
<?xml version="1.0"?>
<!--DTD-->
<!DOCTYPE TRANSDETAIL [
<!ELEMENT TRANSDETAIL (RESPONSE)>
<!ELEMENT RESPONSE (ACCOUNT, GOODRESPONSE, WHYBAD, DATE, PAYMENTMETHODS)>
<!ELEMENT ACCOUNT (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT GOODRESPONSE (#PCDATA)>
<!ELEMENT WHYBAD (#PCDATA)>
<!ELEMENT PAYMENTMETHODS (CREDITCARD?,CHECK?,WEB900?)>
<!ELEMENT CREDITCARD (CREDITCARDATTEMPT*)>
<!ELEMENT CHECK (CHECKATTEMPT*)>
<!ELEMENT WEB900 (WEB900ATTEMPT*)>
<!ELEMENT CREDITCARDATTEMPT (TRANS, AMOUNT, FIRSTNAME, LASTNAME, CITY, STATE, ZIPCODE, COUNTRY, EMAILADDRESS,
IPADDRESS, PHONENUMBER, APPROVED, PINCODE, USERNAME, PASSWORD, WHYDECLINED, REFUNDED, CHARGEDBACK, TRANSACTIONTIME,
EVENTTYPE, REVSHARERID, SUBSCRIPTIONID)>
<!ELEMENT CHECKATTEMPT (TRANS, AMOUNT, FIRSTNAME, LASTNAME, CITY, STATE, ZIPCODE, EMAILADDRESS, IPADDRESS, PHONENUMBER,
APPROVED, PINCODE, USERNAME, PASSWORD, WHYDECLINED, REFUNDED, CHARGEDBACK, REVOKED, TRANSACTIONTIME, EVENTTYPE, REVSHARERID,
SUBSCRIPTIONID)>
<!ELEMENT WEB900ATTEMPT (TRANS, AMOUNT, CODE1, CODE2, REFUNDED, TRANSACTIONTIME)>
<!ELEMENT TRANS (#PCDATA)>
<!ELEMENT PINCODE (#PCDATA)>
<!ELEMENT USERNAME (#PCDATA)>
<!ELEMENT PASSWORD (#PCDATA)>
<!ELEMENT AMOUNT (#PCDATA)>
<!ELEMENT FIRSTNAME (#PCDATA)>
<!ELEMENT LASTNAME (#PCDATA)>
<!ELEMENT CITY (#PCDATA)>
<!ELEMENT STATE (#PCDATA)>
<!ELEMENT ZIPCODE (#PCDATA)>
<!ELEMENT COUNTRY (#PCDATA)>
<!ELEMENT EMAILADDRESS (#PCDATA)>
<!ELEMENT IPADDRESS (#PCDATA)>
<!ELEMENT PHONENUMBER (#PCDATA)>
<!ELEMENT APPROVED (#PCDATA)>
<!ELEMENT WHYDECLINED (#PCDATA)>
<!ELEMENT REFUNDED (#PCDATA)>
<!ELEMENT CHARGEDBACK (#PCDATA)>
<!ELEMENT REVOKED (#PCDATA)>
<!ELEMENT TRANSACTIONTIME (#PCDATA)>
<!ELEMENT EVENTTYPE (#PCDATA)>
<!ELEMENT REVSHARERID (#PCDATA)>
<!ELEMENT SUBSCRIPTIONID (#PCDATA)>
<!ELEMENT CODE1 (#PCDATA)>
<!ELEMENT CODE2 (#PCDATA)>
]>
<TRANSDETAIL>
<RESPONSE>
<ACCOUNT>99999100</ACCOUNT>
<GOODRESPONSE>YES</GOODRESPONSE>
<WHYBAD>NO ERROR</WHYBAD>
<DATE>01/01/1999</DATE>
<PAYMENTMETHODS>
</PAYMENTMETHODS>
</RESPONSE>
</TRANSDETAIL>
<?END TRANSDETAIL?>