<?
error_reporting(E_ALL);
// Xml Functions Test
// Main
$xmlParser = createParser();
setOptions( $xmlParser );
setHandler( $xmlParser );
$fp = openXmlFile( "./settings.xml" );
parser( $xmlParser, $fp );
freeParser( $xmlParser );
// Functions
function createParser() {
$xmlParser = xml_parser_create();
if ($xmlParser == false) {
die( 'Cannot create an XML parser handle.' );
}
return $xmlParser;
}
function setOptions( $xmlParser ) {
xml_parser_set_option( $xmlParser, XML_OPTION_CASE_FOLDING, false );
}
function setHandler( $xmlParser ) {
xml_set_element_handler( $xmlParser, 'handleBeginTag', 'handleEndTag' );
xml_set_character_data_handler( $xmlParser, 'handleCharacterData' );
}
function openXmlFile( $fileName ) {
if ( !($fp = fopen( $fileName, 'r' ) ) ) {
die( 'Cannot open the XML file: ' . $fileName );
}
return $fp;
}
function parser( $xmlParser, $fp ) {
while ( $data = fread( $fp, 4096 ) ) {
$parsedOkay = xml_parse( $xmlParser, $data, feof( $fp) );
if ( !$parsedOkay &&
xml_get_error_code( $xmlParser) != XML_ERROR_NONE ) {
die( 'XmlParse error: ' .
xml_error_string( xml_get_error_code( $xmlParser ) ) .
' at line ' .
xml_get_current_line_number( $xmlParser) );
} // end of if
} // end of while
} // end of function
function freeParser( $xmlParser ) {
$freedOkay = xml_parser_free( $xmlParser );
if ( !$freedOkay ) {
die( 'You did not pass a proper XML Parser to this function' );
}
}
function handleBeginTag( $parser, $name, $attribs ) {
global $currentTag;
$currentTag = $name;
switch ($name) {
case 'config' : print "Config Setting: <br>"; break;
case 'freq' : print "Frequency: "; break;
case 'dir' : print "Directory: "; break;
}
}
function handleCharacterData( $parser, $data ) {
global $currentTag;
switch( $currentTag ) {
case 'config' : break;
case 'freq' : appendToGlobal( $currentTag, $data ); break;
case 'dir' : appendToGlobal( $currentTag, $data ); break;
}
}
function handleEndTag( $parser, $name ) {
switch ($name) {
case 'config' : break;
case 'freq' : global $freq; print $freq . "<br>";
case 'dir' : global $dir; print $dir . "<br>";
}
}
function appendToGlobal( $variableName, $value ) {
global ${$variableName};
${$variableName} .= $value;
${$variableName} = trim(${$variableName});
}
?>