Witajcie,
natrafiłem na dziwną sytuację. Już wyczerpałem wszelkie pomysły na rozwiązanie.
Parsuje SAX'em plik o strukurze:
<?xml version="1.0" encoding='UTF-8'?>
<PictureCollection>
<MainPath>ble</MainPath>
<Picture>
<ID></ID>
<PATH></PATH>
<DESC></DESC>
</Picture>
<Picture>
<ID></ID>
<PATH></PATH>
<DESC></DESC>
</Picture>
</PictureCollection>
Potrzebuję wydobyć ścieżkę i opis obrazka o konkretnym ID.
Napisałem funkcje:
// FUNKCJE SLUZACE DO WCZYTYWANIA DANYCH KONKRETNEGO OBRAZKU
function dataHandler($parser, $data) {
if(0
==strcmp($currentTag,"ID")) if($data==$currentPID)
$insideTargetPicture = 1;
if((0
==strcmp($currentTag,"PATH"))&&$insideTargetPicture) $picPath = $data;
if((0
==strcmp($currentTag,"DESC"))&&$insideTargetPicture) $picDesc = $data;
}
function startElement
($parser, $name, array $attr) { $currentTag = $name;
}
function endElement($parser, $name) {
if(0
==strcmp($name,"PICTURE")) $insideTargetPicture = 0;
}
function fillPictureData($id, &$url, &$desc) {
$currentPID = $id;
$insideTargetPicture = 0;
$file = "./data/welcomePictures.xml";
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "dataHandler");
if (!($fp = fopen($file, "r"))) die("could not open XML input");
while ($data = fread($fp, 4096
)) if(!xml_parse
($parser, $data, feof($fp))) xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
$url = $picPath;
$desc = $picDesc;
xml_parser_free($parser);
}
Problem jest natury "autozerującej" się zmiennej globalnej
$picPath
.
Zmienna jest ładnie wypełniana w
dataHandler
w którym odczytywana jest pożądana wartość.
Jednak po zakończeniu parsowania, zmienna jest już pusta, mimo że w kodzie zmienia się tylko raz w
dataHandler
.
Jakieś pomysły?
:-)