domxpath.phpt 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. --TEST--
  2. DOMXPath Tests
  3. --SKIPIF--
  4. <?php require_once('skipif.inc'); ?>
  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(b'<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. ?>
  43. --EXPECT--
  44. myval
  45. float(1)
  46. bool(true)
  47. float(4)