Witam. Chciałbym wyciągnąć tablicę wszystkich atrybutów spełniających jakiś tam warunek (np
<?php
$obj->name("UPDATE", "PROJECT");
?>
) No i nie wiem jak. $this->out zwraca mi tylko ostatni element napotkany w dokumencie. a rozwiązanie typu
<?php
?>
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

#!/usr/local/bin/php
<?php
class XMLParser {
var $xmlparser;
var $out;
var $elementName;
var $attrName;
function XMLParser(){
$this->xmlparser = xml_parser_create();
xml_set_object($this->xmlparser, $this);
xml_set_character_data_handler($this->xmlparser, "character");
xml_set_element_handler($this->xmlparser, "start", "end");
}
function parseFile($xmlfile){
$fp = fopen($xmlfile, "r");
while($xmldata = fread($fp, 4096
)){ xml_parse
($this->xmlparser, $xmldata, feof($fp)) or
xml_error_string(xml_get_error_code($this->xmlparser)),
xml_get_current_line_number($this->xmlparser)));
}
}
function start($xmlparser, $element, $attribute){
foreach($attribute as $attr_name=>$attr_value){
if($element==$this->elementName && $attr_name==$this->attrName){
$outro[$attr_name] = $attr_value;
}
}
$this->out = $outro; /*<-- nie działa*/
}
function name($elementName, $attrName){
$this->elementName = $elementName;
$this->attrName = $attrName;
}
function prob(){
//var_dump($this->out);
}
function character($xmlparser, $data){}
function end($xmlparser, $element){ }
function close(){
xml_parser_free($this->xmlparser);
}
}
$obj = new XMLParser();
$obj->name("UPDATE", "PROJECT");
$obj->parseFile("example2.xml");
$obj->prob();
$obj->close();
?>