A very useful undocumented feature if you are opening hundreds of xml docs (my script processes 20,000) is DomDocument->free.
This clears the allocated the memory used by the xml file which is not done automatically by just opening a new file on the same variable.
Example:
<?
$dir="/path/to/xml/files/";
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if(is_file($dir.$file))
{
echo $file . "\\n";
$dom=domxml_open_file($dir.$file);
#...
#You xml processor here
#...
$dom->free();
}
}
closedir($dh);
}
?>
domxml_open_file
(PHP 4 >= 4.2.0)
domxml_open_file — Creates a DOM object from an XML file
Opis
The function parses the XML document in the given file.
Parametry
- filename
-
The path to the XML file. The file is accessed in read-only mode.
- mode
-
This optional parameter can be used to change the behavior of this function.
You can use one of the following constants for it: DOMXML_LOAD_PARSING (default), DOMXML_LOAD_VALIDATING or DOMXML_LOAD_RECOVERING. You can add to it also DOMXML_LOAD_DONT_KEEP_BLANKS, DOMXML_LOAD_SUBSTITUTE_ENTITIES and DOMXML_LOAD_COMPLETE_ATTRS by bitwise or.
- error
-
If used, it will contain the error messages. error must be passed in by reference.
Zwracane wartości
Returns a DomDocument instance of the given file.
Przykłady
Example #1 Opening an XML document from a file
<?php
if (!$dom = domxml_open_file("example.xml")) {
echo "Error while parsing the document\n";
exit;
}
$root = $dom->document_element();
?>
Rejestr zmian
| Wersja | Opis |
|---|---|
| 4.3.0 | The parameters mode and error were added. |
domxml_open_file
17-May-2006 08:23
28-Dec-2005 06:47
another way to resolve path's problem is to use realpath() function
for example:
<?php
$file=$_REQUEST['file'];
$xmlPath = realpath("../xml/");
$fileXML ="$file";
if(!$dom = domxml_open_file($xmlPath."/".$fileXML)) {
echo "error opening the file";
exit;
}
?>
N.B. you have to put the final slash ( / ) beetween path and file name!
19-Mar-2005 05:13
For me, on Windows XP, the solution with file_get_contents works, the one with domxml_open_file does not. It seems the latter caches the loaded file. Quite confusing.
14-Feb-2005 11:00
If you want to work on both Windows and Linux, I found appending the following to the front of your file path works:
$xmlPath = dirname(__FILE__) . "/";
$xmlDOM = domxml_open_file($xmlPath . "file.xml");
(rather than the "\\" in a previous post on this page which only works on Windows).
This should get around the I/O errors.
30-Oct-2003 10:02
You can load your own DTD's within your XML Doc like this:
<?php
$domxml = domxml_open_file('test.xml',DOMXML_LOAD_VALIDATING,$error);
?>
I hope this helps....
The DocumentType Definition (must/have) to be in the Doc root of your Server...
16-Jun-2003 01:30
If you're working on a windows machine and don't want to use full paths , just use...
$showfile = file_get_contents($path . "/" . $fileName);
if(!$domDoc = domxml_open_mem($showfile)) {
echo "Couldn't load xml...";
exit;
}
Because file_get_contents() can use relative paths on Win, it keeps your code more portable...
twist
24-Feb-2003 05:49
domxml documentation is a moving target, for 4.2.3 a working example is:
<?
$xmlpath = dirname(__FILE__) . "\\";
$xmldoc = domxml_open_file( $xmlpath . "test.xml");
$xsldoc = domxml_xslt_stylesheet_file ( $xmlpath . "test.xsl");
$result = $xsldoc->process($xmldoc);
print $result->dump_mem();
?>
RTFS is a working method in this case (lucky guesses work also from time tor time) :-)
07-Feb-2003 02:32
Using PHP 4.2.3 and Win2K.
The XML file needs to be referenced using the full filesystem path name, even if its in the same directory.
29-Apr-2002 03:12
Using PHP 4.1.2, Win2K, IIS.
I found that if the path to the XML source file is too long then the file isn't picked up. I haven't tested it to see how long the path can be or whether this is still an issue in PHP 4.2
