<index>
<file path="slova/fra-a_la_Saint_Glin_Glin.mp3">
<tag
swac_alphaidx="(expressions)|saint"
swac_text="а la Saint Glin Glin" />
</file>
</index>
Надо сделать так, чтоб если строка полученная ПОСТОМ совпадает с атрибутом swac_alphaidx="(expressions)|saint", то выводим атрибуты swac_text="à la Saint Glin Glin" и path="slova/fra-a_la_Saint_Glin_Glin.mp3"
Вот как я делаю
function onStart($sax, $tag, $att){
if($_POST['slovo']){
$_POST['slovo'] = trim($_POST['slovo']);
if($tag == "FILE"){
$adress = '<span class="mp3">'.$att['PATH'].'</span> - ';
}
if($tag == "TAG"){
$cc = strpos($att['SWAC_ALPHAIDX'], $_POST['slovo']);
if($cc > 0){
echo $adress.'</span> '.$att['SWAC_TEXT'].'<br/>';
}
}
}
}
Но $adress куда-то теряется
Спустя 9 часов, 59 минут, 4 секунды (29.04.2011 - 09:29) linker написал(а):
XPath.
Спустя 43 минуты, 3 секунды (29.04.2011 - 10:12) Ser18 написал(а):
Цитата (linker @ 29.04.2011 - 06:29) |
XPath. |
Что это значит?
Спустя 10 минут, 56 секунд (29.04.2011 - 10:23) Ser18 написал(а):
Цитата (linker @ 29.04.2011 - 06:29) |
XPath. |
Хотелось бы пока без XPath
Просто понять почему переменная теряется
Спустя 1 минута, 16 секунд (29.04.2011 - 10:24) linker написал(а):
Потому, что не выполняется условие
if ($tag == "FILE")таки
$dom = new DomDocument();
$dom->load('file.xml');
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//tag[@swac_alphaidx="(expressions)|saint"]');
foreach($nodes as $node)
echo $node->getAttribute('swac_text');
Спустя 7 минут, 11 секунд (29.04.2011 - 10:31) Ser18 написал(а):
Оно выполняется только я не пойму последовательность
Если написать так
то выводятся $adress а потом, если выполняется это условие, то и оно выводится, только без $adress
Если написать так
if($tag == "FILE"){
echo $adress = '<span class="mp3">'.$att['PATH'].'</span> - ';
}
то выводятся $adress а потом, если выполняется это условие, то и оно выводится, только без $adress
if($tag == "TAG"){
$cc = strpos($att['SWAC_ALPHAIDX'], $_POST['slovo']);
if($cc > 0){
echo $adress.'</span> '.$att['SWAC_TEXT'].'<br/>';
}
}
Спустя 4 минуты, 8 секунд (29.04.2011 - 10:36) linker написал(а):
onStart() при каких условиях и как вызывается?
Спустя 12 минут, 15 секунд (29.04.2011 - 10:48) Ser18 написал(а):
$sax = xml_parser_create("UTF-8");
xml_set_element_handler($sax, "onStart", "onEnd");
xml_set_character_data_handler($sax, "onText");
if($_POST['slovo']){
xml_parse($sax, file_get_contents("xml/db_sl_petit2.xml"));
}
Спустя 18 минут, 59 секунд (29.04.2011 - 11:07) linker написал(а):
Советую перейти либо на DOM, либо на SimpleXml. Условие
1. Парсинг xml
2. Найден тэг file
3. Вызов процедуры onStart(..., 'file', ...)
4. Выполнение условия if($tag == "FILE")
5. Определение переменной $adress
6. Выход из процедуры и уничтожение переменной $adress (она является локальной внутри функции onStart() и уничтожается, когда функция прекращает свою работу)
7. Найден тэг tag
8. Вызов процедуры onStart(..., 'tag', ...)
9. Выполнение условия if($tag == "TAG")
10. Переменная $adress не определяется, потому что не выполнено условие if($tag == "FILE")
11. Завершение работы onStart().
Вот как бы так.
if($tag == "FILE")срабатывает тогда, когда попадается тэг file, когда попадается тэг tag то это уже другой вызов процедуры onStart(), в которой $adress уже не определена ибо срабатывает условие
if($tag == "TAG"){. Схематично так:
1. Парсинг xml
2. Найден тэг file
3. Вызов процедуры onStart(..., 'file', ...)
4. Выполнение условия if($tag == "FILE")
5. Определение переменной $adress
6. Выход из процедуры и уничтожение переменной $adress (она является локальной внутри функции onStart() и уничтожается, когда функция прекращает свою работу)
7. Найден тэг tag
8. Вызов процедуры onStart(..., 'tag', ...)
9. Выполнение условия if($tag == "TAG")
10. Переменная $adress не определяется, потому что не выполнено условие if($tag == "FILE")
11. Завершение работы onStart().
Вот как бы так.
Спустя 56 минут, 30 секунд (29.04.2011 - 12:03) Ser18 написал(а):
Спасибо большое за объяснение