xml003.phpt 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. --TEST--
  2. XML parser test, xml_set_object callbacks
  3. --SKIPIF--
  4. <?php
  5. require_once("skipif.inc");
  6. XML_SAX_IMPL == 'libxml' && die('skip this test is not intended for libxml SAX parser');
  7. ?>
  8. --FILE--
  9. <?php
  10. chdir(dirname(__FILE__));
  11. class myclass
  12. {
  13. function startElement($parser, $name, $attribs)
  14. {
  15. print '{'.$name;
  16. if (sizeof($attribs)) {
  17. while (list($k, $v) = each($attribs)) {
  18. print " $k=\"$v\"";
  19. }
  20. }
  21. print '}';
  22. }
  23. function endElement($parser, $name)
  24. {
  25. print '{/'.$name.'}';
  26. }
  27. function characterData($parser, $data)
  28. {
  29. print '{CDATA['.$data.']}';
  30. }
  31. function PIHandler($parser, $target, $data)
  32. {
  33. print '{PI['.$target.','.$data.']}';
  34. }
  35. function defaultHandler($parser, $data)
  36. {
  37. if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
  38. print '{ENTREF['.$data.']}';
  39. } else {
  40. print '{?['.$data.']}';
  41. }
  42. }
  43. function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId)
  44. {
  45. print '{EXTENTREF['.$openEntityNames.','.$base.','.$systemId.','.$publicId."]}\n";
  46. return true;
  47. }
  48. }
  49. $xml_parser = xml_parser_create();
  50. $obj = new myclass;
  51. xml_set_object($xml_parser, $obj);
  52. xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
  53. xml_set_element_handler($xml_parser, "startElement", "endElement");
  54. xml_set_character_data_handler($xml_parser, "characterData");
  55. xml_set_processing_instruction_handler($xml_parser, "PIHandler");
  56. xml_set_default_handler($xml_parser, "defaultHandler");
  57. xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
  58. if (!($fp = @fopen("xmltest.xml", "r"))) {
  59. die("could not open XML input");
  60. }
  61. while ($data = fread($fp, 4096)) {
  62. if (!xml_parse($xml_parser, $data, feof($fp))) {
  63. die(sprintf("XML error: %s at line %d\n",
  64. xml_error_string(xml_get_error_code($xml_parser)),
  65. xml_get_current_line_number($xml_parser)));
  66. }
  67. }
  68. print "parse complete\n";
  69. xml_parser_free($xml_parser);
  70. ?>
  71. --EXPECT--
  72. {?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[
  73. ]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[
  74. ]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[
  75. ]}{?[%incent;]}{?[
  76. ]}{?[]]}{?[>]}{?[
  77. ]}{ROOT ID="elem1"}{CDATA[
  78. ]}{CDATA[ Plain text.]}{CDATA[
  79. ]}{CDATA[ ]}{ELEM1}{CDATA[
  80. ]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[
  81. ]}{CDATA[ ]}{ELEM2}{CDATA[
  82. ]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[
  83. ]}{CDATA[ ]}{ELEM3}{CDATA[
  84. ]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[
  85. ]}{CDATA[ ]}{ELEM4}{CDATA[
  86. ]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[
  87. ]}{CDATA[ ]}{/ELEM4}{CDATA[
  88. ]}{CDATA[ ]}{/ELEM3}{CDATA[
  89. ]}{CDATA[ ]}{/ELEM2}{CDATA[
  90. ]}{CDATA[ ]}{/ELEM1}{CDATA[
  91. ]}{/ROOT}{?[
  92. ]}parse complete