| 
<?php
 function getmicrotime() {
 list($usec, $sec) = explode(" ", microtime());
 return ((float)$usec + (float)$sec);
 }
 
 $root = $_SERVER['DOCUMENT_ROOT'];
 $path1 = $root.'/myXML;';
 $path2 = $root.'/PEAR;';
 $searchPath = $path1.$path2;
 // Set the search path.
 ini_set('include_path', $searchPath);
 
 require_once('XML_Preprocessor.php');
 require_once('myDOM/myDOM.php');
 require_once('myXPath/myXPath.php');
 
 PEAR::setErrorHandling(PEAR_ERROR_RETURN, E_USER_ERROR);
 
 // Create new DOM document.
 $oDocument = new Document();
 $oDocument->setOption('method', 'xml');
 $oDocument->setOption('indent', true);
 
 // Initialize global variable for using in attribute value (see sample.xml file)
 $id = 1;
 
 // Create object of class XML_Preprocessor.
 $oXml = XML_Preprocessor::create(&$oDocument);
 
 // As in a file sample.xml is used PHP code, for its parsing the object of class
 // XML_Preprocessor will be used.
 $oXml->parseFile('sample.xml');
 
 // Set the selecting path.
 $path = '/books/*';
 if ($_GET['xpath']) {
 $path = stripslashes($_GET['xpath']);
 }
 // Create object myXPath.
 $oXPath =& myXPath::create(&$oDocument);
 $time_start = getmicrotime();
 $nodeSet = $oXPath->evaluate($path);
 $time_end = getmicrotime();
 $time = $time_end - $time_start;
 
 ?>
 
 <html>
 <head>
 <title>myXPath example</title>
 </head>
 <body style="margin: 10%; font-family: Courier New;">
 <center>
 <h1>myXPath example</h1>
 </center>
 <div>
 <ul>
 <li>Now it is possible to not put white space between operators and operands.</li>
 <ul>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">/books/book/*[name()!="price"]
 </ul>
 </li>
 <li>It is possible to use the nested predicates.
 <ul>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//title[parent::book[@id>=5]]</li>
 </ul>
 </li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[price > 10]</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[(@id=1)or(@id=7)]</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[author="Plato" or author="Sophocles"]</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[5]/following-sibling::node()</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[position()=5]/preceding-sibling::node()</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//*[self::book or parent::book[@id=4]]</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//title/../author[.="Sophocles"]</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//price/ancestor::book[@id!=5]</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">/processing-instruction()</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">/processing-instruction("xml")</li>
 <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">/processing-instruction("xml-stylesheet")</li>
 </ul>
 <script language="php">
 echo "<br>Time: $time s.";
 </script>
 <form name="pathForm">
 <input type="text" name="xpath" style="width: 400;">
 <input type="submit" name="submit" value="Submit">
 </form>
 </div>
 <div style="color: blue; background-color: silver; padding: 1%;">
 <script language="php">
 print('NodeSet:<br>');
 foreach ($nodeSet as $node) {
 print('<br>'.htmlentities($node->toString($deep = false)));
 }
 </script>
 </div>
 </body>
 </html>
 |