[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: xml и php
Ser18
Есть такой xml файл
<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 написал(а):
Оно выполняется только я не пойму последовательность
Если написать так
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. Условие
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 написал(а):
Спасибо большое за объяснение
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.