<?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>
 
 |