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