Autor Zpráva
Anonymní
Profil *
Ahoj, snažim se přistupovat datům uložených v xml, ale nějak se mi to nedaří. Tento script

class xml {
protected $parser;
protected $data;
public function __construct($data) {
$this->data = $data;
$this->parser = xml_parser_create();
xml_set_element_handler($this->parser, "pocatecniTag", "koncovyTag");
xml_set_character_data_handler($this->parser, "znaky");
echo $this->parsuj() ? "jo" : "ne"; // vypise jo
}
public function __destruct() {
echo "koncim";
}
protected function pocatecniTag($parser, $nazev, $atributy) {
echo $nazev;
echo $atributy;
}
protected function koncovyTag($parser, $nazev) {
echo $nazev;
}
protected function znaky($parser, $data) {
echo $data;

}
protected function parsuj() {
return xml_parse($this->parser, $this->data[0]);
}
}

$xml = new xml($vysledky); // $vysleky = array(0 => "xml soubor", 1 => "xml soubor");


hodí to hlášky
Warning: xml_parse() [function.xml-parse]: Unable to call handler pocatecniTag() in E:\web\xml\mail-trida.php on line 94

Warning: xml_parse() [function.xml-parse]: Unable to call handler znaky() in E:\web\xml\mail-trida.php on line 94

Warning: xml_parse() [function.xml-parse]: Unable to call handler pocatecniTag() in E:\web\xml\mail-trida.php on line 94

Warning: xml_parse() [function.xml-parse]: Unable to call handler koncovyTag() in E:\web\xml\mail-trida.php on line 94


Nevite co dělám špatně?
Oswald
Profil
Ahoj, jde o to, že se jako parametry funkci xml_set_element_handler předává callback. Ty chceš jako ten callback použít metodu objektu, ale předáváš jenom název té metody. Správně by to tedy mělo být asi takto:


 

xml_set_element_handler($this->parser,
array($this, "pocatecniTag"),
array($this, "koncovyTag"));


Viz http://uk.php.net/callback#language.types.callback

Tenhle parser mi přijde hodně user-unfriendly, pokud máš možnost, tak doporučuju použít klasický W3C DOM nebo SimpleXML.
Anonymní
Profil *
A stejně tak doplnit

xml_set_character_data_handler($this->parser, 

array($this, "znakz"));

Díky za pomoc, informace o zpracování xml čerpám z tohoto http://interval.cz/serialy/php-a-prace-s-dokumentem-xml/ seriálu. Potřebuji jen jednoduše zpracovávat vždy stejný xml. Myslíš, že to mám přepsat pomocí simpleXML?
Anonymní
Profil *
tak dál boujiji s xml
V poli $this->data mám tři xml dokumenty

kód
if(!xml_parse($this->parser, $this->data[0])) echo "NE"; else echo "ANO";

if(!xml_parse($this->parser, $this->data[1])) echo "NE"; else echo "ANO";
if(!xml_parse($this->parser, $this->data[2])) echo "NE"; else echo "ANO";

vypíše ANO NE NE

když libovlně přeházím pořadí prvků
if(!xml_parse($this->parser, $this->data[2])) echo "NE"; else echo "ANO";

if(!xml_parse($this->parser, $this->data[1])) echo "NE"; else echo "ANO";
if(!xml_parse($this->parser, $this->data[0])) echo "NE"; else echo "ANO";


vypíše to znovu ANO NE NE. Vypadáto, že fci xml_parse může volat jen jednou. Jak mám postupovat když bych chtěl xml_parse volat víc než jednou?
Anonymní
Profil *
http://cz.php.net/manual/en/function.xml-get-error-code.php nic nevypisuje :(
Oswald
Profil
Rád bych pomohl, ale s tímhle parserem jsem nikdy nedělal. Možná je potřeba pokaždé vytvořit ten parser znovu?

Můžu nabídnout alternativu v DOM:

$doc = new DOMDocument();

if ($doc->loadXml($data)) {
echo 'ANO';
} else {
echo 'NE';
}
minimal
Profil *
pre inspiraciu:
http://pear.php.net/package/XML_Parser
Toto téma je uzamčeno. Odpověď nelze zaslat.

0