From:             [EMAIL PROTECTED]
Operating system: NT2000
PHP version:      4.0.6
PHP Bug Type:     DOM XML related
Bug description:  Fatal error: Call to undefined function: xmldocfile() 

// data file
$file = "library.xml";
// create a document object
$dom = xmldocfile($file);


Display Error Message

Fatal error: Call to undefined function: xmldocfile() in d:\apache
group\apache\htdocs\test\phpxml2.html on line 28

//-- source
// data file - library.xml
// success html - phpxml.html
// fail html    - phpxml2.html


//----------------------------------------------------------
// data file - library.xml
//----------------------------------------------------------

<?xml version="1.0"?>

<library>
        <book>
                <title>Hannibal</title>
                <author>Thomas Harris</author>
                <genre>Suspense</genre>
                <pages>564</pages>
                <price>8.99</price>
                <rating>4</rating>
        </book>

        <book>
                <title>Run</title>
                <author>Douglas E. Winter</author>
                <genre>Thriller</genre>
                <pages>390</pages>
                <price>7.49</price>
                <rating>5</rating>
        </book>

        <book>
                <title>The Lord Of The Rings</title>
                <author>J. R. R. Tolkien</author>
                <genre>Fantasy</genre>
                <pages>3489</pages>
                <price>10.99</price>
                <rating>5</rating>
        </book>

</library>

//----------------------------------------------------------
// success html - phpxml.html
//----------------------------------------------------------
<html>                                                                   
<head>                                                                   
<title>The Library</title>                                               
<style type="text/css">                                                  
TD {font-family: Arial; font-size: smaller}                              
H2 {font-family: Arial}                                                  
</style>                                                                 
</head>                                                                  
<body bgcolor="white">                                                   
<h2>The Library</h2>                                                     
<table border="1" cellspacing="1" cellpadding="5">                       
<tr>                                                                     
        <td align=center>Title</td>                                            
        <td align=center>Author</td>                                           
        <td align=center>Price</td>                                            
        <td align=center>User Rating</td>                                      
</tr>                                                                    
                                                                         
<?                                                                       
// data file                                                             
$file = "library.xml";                                                   
                                                                         
// use this to keep track of which tag the parser is currently processing
$currentTag = "";                                                        
                                                                         
function startElement($parser, $name, $attrs) {                          
        global $currentTag;                                                    
        $currentTag = $name;                                                   
                                                                         
        // output opening HTML tags                                            
        switch ($name) {                                                       
        case "BOOK":                                                           
                echo "<tr>";                                                         
        break;                                                           
                                                                         
        case "TITLE":                                                          
                echo "<td>";                                                         
                break;                                                               
                                                                         
        case "AUTHOR":                                                         
                echo "<td>";                                                         
                break;                                                               
                                                                         
        case "PRICE":                                                          
                echo "<td>";                                                         
                break;                                                               
                                                                         
        case "RATING":                                                         
                echo "<td>";                                                         
                break;                                                               
                                                                         
        default:                                                               
                break;                                                               
        }                                                                      
}                                                                        
                                                                         
function endElement($parser, $name) {                                    
        global $currentTag;                                                    
                                                                         
        // output closing HTML tags                                            
        switch ($name) {                                                       
        case "BOOK":                                                           
                echo "</tr>";                                                        
                break;                                                               
                                                                         
        case "TITLE":                                                          
                echo "</td>";                                                        
                break;                                                               
                                                                         
        case "AUTHOR":                                                         
                echo "</td>";                                                        
                break;                                                               
                                                                         
        case "PRICE":                                                          
                echo "</td>";                                                        
                break;                                                               
                                                                         
        case "RATING":                                                         
                echo "</td>";                                                        
                break;                                                               
                                                                         
        default:                                                               
                break;                                                               
        }                                                                      
                                                                         
        // clear current tag variable                                          
        $currentTag = "";                                                      
}                                                                        
                                                                         
// process data between tags                                             
function characterData($parser, $data) {                                 
                                                                         
        global $currentTag;                                                    
        // text ratings                                                        
        $ratings = array("Words fail me!", "Terrible", "Bad", "Indifferent",   
"Good", "Excellent");                                                    
                                                                         
        // format the data                                                     
        switch ($currentTag) {                                                 
        case "TITLE":                                                          
                // italics for title                                                 
                echo "<i>$data</i>";                                                 
                break;                                                               
                                                                         
        case "AUTHOR":                                                         
                echo $data;                                                          
                break;                                                               
                                                                         
        case "PRICE":                                                          
                // add currency symbol for price                                     
                echo "$" . $data;                                                    
                break;                                                               
                                                                         
        case "RATING":                                                         
                // get text rating                                                   
                echo $ratings[$data];                                                
                break;                                                               
                                                                         
        default:                                                               
                break;                                                               
        }                                                                      
}                                                                        
                                                                         
// initialize parser                                                     
$xml_parser = xml_parser_create();                                       
                                                                         
// set callback functions                                                
xml_set_element_handler($xml_parser, "startElement", "endElement");      
xml_set_character_data_handler($xml_parser, "characterData");            
                                                                         
// open XML file                                                         
if (!($fp = fopen($file, "r")))                                          
{                                                                        
    die("Cannot locate XML data file: $file");                           
}                                                                        
                                                                         
// read and parse data                                                   
while ($data = fread($fp, 4096))                                         
{                                                                        
    // error handler                                                     
        if (!xml_parse($xml_parser, $data, feof($fp)))                         
        {                                                                      
    die(sprintf("XML error: %s at line %d",                              
xml_error_string(xml_get_error_code($xml_parser)),                       
xml_get_current_line_number($xml_parser)));                              
    }                                                                    
}                                                                        
                                                                         
// clean up                                                              
xml_parser_free($xml_parser);                                            
                                                                         
?>                                                                       
                                                                         
</table>                                                                 
</body>                                                                  
</html>                                                                  


//----------------------------------------------------------
// fail html    - phpxml2.html
//----------------------------------------------------------

<html>
<head>
<title>The Library</title>
<style type="text/css">
TD {font-family: Arial; font-size: smaller}
H2 {font-family: Arial}
</style>
</head>
<body bgcolor="white">
<h2>The Library</h2>
<table border="1" cellspacing="1" cellpadding="5">
<tr>
        <td align=center>Title</td>
        <td align=center>Author</td>
        <td align=center>Price</td>
        <td align=center>User Rating</td>
</tr>

<?

// text ratings
$ratings = array("Words fail me!", "Terrible", "Bad", "Indifferent",
"Good", "Excellent");

// data file
$file = "library.xml";
// create a document object
$dom = xmldocfile($file);

// get reference to root node
$root = $dom->root();
// array of root node's children - the <book> level
$nodes = $root->children();

// iterate through <book>s
for ($x=0; $x<sizeof($nodes); $x++)
{
        // new row
        echo "<tr>";

                // check type
                // this is to correct whitespace (empty nodes)
                if ($nodes[$x]->type == XML_ELEMENT_NODE)
                {
                $thisNode = $nodes[$x];
                // get an array of this node's children - the <title>, <author> level
                $childNodes = $thisNode->children();

                        // iterate through children
                        for($y=0; $y<sizeof($childNodes); $y++)
                        {
                                // check type again
                                if ($childNodes[$y]->type == XML_ELEMENT_NODE)
                                {
                                        // appropriate markup for each type of tag
                                        // like a switch statement
                                        if ($childNodes[$y]->name == "title")
                                        {
                                        echo "<td><i>" . $childNodes[$y]->content . 
"</i></td>";
                                        }

                                        if ($childNodes[$y]->name == "author")
                                        {
                                        echo "<td>" . $childNodes[$y]->content . 
"</td>";
                                        }

                                        if ($childNodes[$y]->name == "price")
                                        {
                                        echo "<td>$" . $childNodes[$y]->content . 
"</td>";
                                        }

                                        if ($childNodes[$y]->name == "rating")
                                        {
                                        echo "<td>" . 
$ratings[$childNodes[$y]->content] . "</td>";
                                        }

                                }
                        }

                }
        // close the row tags
        echo "</tr>";
}


?>
</table>
</body>
</html>

 






-- 
Edit bug report at: http://bugs.php.net/?id=13811&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to