(PHP 4 >= 4.2.0)
domxml_open_file — Creates a DOM object from an XML file
The function parses the XML document in the given file.
The path to the XML file. The file is accessed in read-only 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.
If used, it will contain the error messages. error must be passed in by reference.
Returns a DomDocument instance of the given file.
Beispiel #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();
?>
| Version | Beschreibung | 
|---|---|
| 4.3.0 | The parameters mode and error were added. | 
The way to order the nodes in XML-files by an attribute (desc or asc):
<?php
// open the XML-file
$xml = domxml_open_file("our_file.xml");
// get the root element
$root = $xml->document_element(); 
// get the list of the nodes
$nodes = $root->child_nodes(); 
// create the array 'messages' of the nodes
foreach($nodes as $node)
{
 if ($node->node_name() == 'photo')
 {
     $currentMessage['thumbnail'] = $node->get_attribute('thumbnail');
     $currentMessage['filename'] = $node->get_attribute('filename');
     $currentMessage['idnum'] = $picnum[md5($node->get_attribute('filename'))];
     $messages[] = $currentMessage;
 }
}
// sort all the nodes by idnum (asc/desc is "1: -1" or "-1: 1")
$compare_func = create_function('$a, $b', 'return ($a[\'idnum\']==$b[\'idnum\'])? 0: (($a[\'idnum\']>$b[\'idnum\'])? 1: -1);');
usort($messages, $compare_func);
// create the new XML-data
$doc = domxml_new_doc("1.0");
$root = $doc->create_element("photos");
$root = $doc->append_child($root);
for($ee=0;$ee<count($messages);$ee++)
{
    $msgNode = $root->new_child('photo');
    foreach($messages[$ee] as $description => $result)
    {
        $msgNode->set_attribute($description,$result);
    }
}
// write down the XML-file
$text = $doc->dump_mem(true);
$fp = fopen("our_file.xml","w");
fwrite($fp,$text);
fclose($fp);
?>
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);
}
?>
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!
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.
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.
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...
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
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) :-)
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.
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