domxpath.phpt 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. --TEST--
  2. DOMXPath Tests
  3. --EXTENSIONS--
  4. dom
  5. --FILE--
  6. <?php
  7. require_once("dom_test.inc");
  8. function MyAverage($nodelist) {
  9. $count = 0;
  10. $val = 0;
  11. foreach ($nodelist AS $node) {
  12. $count++;
  13. $val += $node->textContent;
  14. }
  15. if ($val > 0) {
  16. return $val/$count;
  17. } else {
  18. return 0;
  19. }
  20. }
  21. $dom = new DOMDocument;
  22. $dom->loadXML('<root xmlns="urn::default"><child>myval</child></root>');
  23. $xpath = new DOMXPath($dom);
  24. $xpath->registerPHPFunctions('MyAverage');
  25. $xpath->registerNamespace("php", "http://php.net/xpath");
  26. $xpath->registerNamespace("def", "urn::default");
  27. $nodelist = $xpath->query("//def:child");
  28. if ($node = $nodelist->item(0)) {
  29. print $node->textContent."\n";
  30. }
  31. $count = $xpath->evaluate("count(//def:child)");
  32. var_dump($count);
  33. $xpathdoc = $xpath->document;
  34. var_dump($xpathdoc instanceof DOMDocument);
  35. $root = $dom->documentElement;
  36. $root->appendChild($dom->createElementNS("urn::default", "testnode", 3));
  37. $root->appendChild($dom->createElementNS("urn::default", "testnode", 4));
  38. $root->appendChild($dom->createElementNS("urn::default", "testnode", 4));
  39. $root->appendChild($dom->createElementNS("urn::default", "testnode", 5));
  40. $avg = $xpath->evaluate('number(php:function("MyAverage", //def:testnode))');
  41. var_dump($avg);
  42. try {
  43. $xpath->registerPHPFunctions('non_existent');
  44. $avg = $xpath->evaluate('number(php:function("non_existent", //def:testnode))');
  45. } catch (\Error $e) {
  46. echo $e->getMessage() . \PHP_EOL;
  47. }
  48. try {
  49. $xpath->registerPhpFunctions(['non_existant']);
  50. $avg = $xpath->evaluate('number(php:function("non_existent", //def:testnode))');
  51. } catch (\Error $e) {
  52. echo $e->getMessage() . \PHP_EOL;
  53. }
  54. ?>
  55. --EXPECT--
  56. myval
  57. float(1)
  58. bool(true)
  59. float(4)
  60. Unable to call handler non_existent()
  61. Unable to call handler non_existent()