Witam. Chciałbym wyciągnąć tablicę wszystkich atrybutów spełniających jakiś tam warunek (np
  1. <?php
  2. $obj->name("UPDATE", "PROJECT");
  3. ?>
) No i nie wiem jak. $this->out zwraca mi tylko ostatni element napotkany w dokumencie. a rozwiązanie typu
  1. <?php
  2. print_r($outro)
  3. ?>
nie jest zbyt fajne. Zdaje się, że tablica $outro i tak jest jednowymiarowa tylko drukowana za każdym razem gdy spełniony jest zadany warunek. Da się jakoś stworzyć zmienną, która będzie zachowywać stan wewnątrz tej klasy? Z góry dziękuje za odpowiedź i jeśli naruszyłem jakieś zasady działania forum bardzo przepraszam - to mój pierwszy post smile.gif

  1. #!/usr/local/bin/php
  2. <?php
  3.  
  4. class XMLParser {
  5.  
  6. var $xmlparser;
  7. var $out;
  8. var $elementName;
  9. var $attrName;
  10.  
  11. function XMLParser(){
  12. $this->xmlparser = xml_parser_create();
  13. xml_set_object($this->xmlparser, $this);
  14. xml_set_character_data_handler($this->xmlparser, "character");
  15. xml_set_element_handler($this->xmlparser, "start", "end");
  16. }
  17.  
  18. function parseFile($xmlfile){
  19.  
  20. $fp = fopen($xmlfile, "r");
  21.  
  22. while($xmldata = fread($fp, 4096)){
  23. xml_parse($this->xmlparser, $xmldata, feof($fp)) or
  24. die (sprintf("XML error: %s at line %d", 
  25. xml_error_string(xml_get_error_code($this->xmlparser)),
  26. xml_get_current_line_number($this->xmlparser)));
  27. }
  28. }
  29.  
  30. function start($xmlparser, $element, $attribute){
  31.  
  32. foreach($attribute as $attr_name=>$attr_value){
  33. if($element==$this->elementName && $attr_name==$this->attrName){
  34. $outro[$attr_name] = $attr_value;
  35. }
  36. }
  37. print_r($outro); /*<--*/
  38. $this->out = $outro; /*<-- nie działa*/
  39. }
  40.  
  41. function name($elementName, $attrName){
  42.  
  43. $this->elementName = $elementName;
  44. $this->attrName = $attrName;
  45.  
  46. }
  47.  
  48. function prob(){
  49. //var_dump($this->out);
  50. }
  51.  
  52. function character($xmlparser, $data){}
  53.  
  54. function end($xmlparser, $element){
  55. }
  56.  
  57. function close(){
  58. xml_parser_free($this->xmlparser);
  59. }
  60. }
  61.  
  62. $obj = new XMLParser();
  63. $obj->name("UPDATE", "PROJECT");
  64. $obj->parseFile("example2.xml");
  65. $obj->prob();
  66. $obj->close();
  67.  
  68. ?>