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]
