$parser = xml_parser_create("");
xml_set_element_handler( $parser, "start_handler", "end_handler" );
xml_set_character_data_handler( $parser, "character_handler" );
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, 0 );
$file = file_get_contents($document);
xml_parse( $parser, $file) or die ( format_error( $parser ) );
xml_parser_free( $parser );
function start_handler( $p, $name, $atts ) {
global $open_stack;
$open_stack[] = array($name, "");
}
function character_handler( $p, $txt ) {
global $open_stack;
$cur_index = count($open_stack)-1;
$open_stack[$cur_index][1] = $open_stack[$cur_index][1] . $txt;
}
function end_handler( $p, $name) {
global $open_stack;
$el = array_pop( $open_stack );
// ОБЩИЕ ЭЛЕМЕНТЫ
// простой текст
if ( $name == "p") {
echo "<p/>$el[1]</p/>";
}
// простые ссылки
// ссылка-текст с указанием пути к ресурсу внутри сайта
if ( $name == "ahref") {
echo "<a href=rus.php?link=$el[1]>";
}
// ссылка-текст с названием страницы
if ( $name == "atext") {
echo "$el[1]</a/>";
}
// глобальная ссылка-текст к ресурсу
if ( $name == "webref") {
echo "<a href=\"$el[1]\">";
}
// текст глобальной ссылки
if ( $name == "webtext") {
echo "$el[1]</a/>";
}
// текст-постскриптум
if ( $name == "ps") {
echo "<p class=\"ps\"/>$el[1]</p/>";
}
// НОВОСТИ
// дата
if ( $name == "datenews") {
echo "<br/>";
echo "<div align=\"left\"/>";
echo "<i class=\"news\"/>$el[1]</i/>";
echo "</div/>";
}
// заголовок
if ( $name == "hnews") {
echo "<br/>";
echo "<h2 class=\"news\"/>$el[1]</h2/>";
}
// текст
if ( $name == "pnews") {
echo "<p class=\"news\"/>$el[1]</p/>";
echo "</div/>";
}
// изображения
if ( $name == "imagenews") {
echo "<img class=\"news\">$el[1]</img>";
}
if ( $name == "news") {
echo "<div class=\"news\"/>";
echo "<hr/ class=\"news\">";
echo "</div/>";
}
// КОНЦЕРТЫ
// дата
if ( $name == "dateconzert") {
echo "<br/>";
echo "<div align=\"left\">";
echo "<i class=\"conzert\"/>$el[1]</i>";
//echo "</div/>";
}
// заголовок
if ( $name == "hconzert") {
echo "<h2 class=\"conzert\"/>$el[1]</h2/>";
}
// текст
if ( $name == "pconzert") {
echo "<p class=\"conzert\"/>$el[1]</p/>";
echo "</div/>";
}
// изображения
if ( $name == "imgconzert") {
echo "<img class=\"conzerts\">$el[1]</img>";
}
if ( $name == "conzert") {
echo "<div/>";
echo "<hr/ class=\"conzert\">";
echo "</div/>";
}
// ГОСТЕВАЯ
// дата
if ( $name == "dateguest") {
echo "<br/>";
echo "<div align=\"left\"/>";
echo "<p class=\"guestdate\"/>$el[1]</p/>";
}
// имя
if ( $name == "nameguest") {
echo "<h2 class=\"guest\"/>Гость: $el[1]</h2/>";
}
// город
if ( $name == "cityguest") {
echo "<h2 class=\"guest2\"/>Страна/город: $el[1]</h2/>";
}
// текст
if ( $name == "pguest") {
echo "<p class=\"guest\"/>$el[1]</p/>";
}
// ответ администратора
if ( $name == "padmin") {
echo "<p class=\"admin\"/>$el[1]</p/>";
echo "</div/>";
}
if ( $name == "comment") {
echo "<div/>";
echo "<hr/ class=\"guest\" align=\"center\">";
echo "</div/>";
}
///////////////////////////////////////////////////////////////////////////////////
}
function format_error ( $p ) {
$code = xml_get_error_code( $p );
$str = xml_error_string( $code );
$line = xml_get_current_line_number ( $p );
return "Ошибка XML ($code): $str в строке $line";
}
Как его изменить, чтобы он выводил документ наоборот, т.е. первым выводилась информация в последнем <news>, <comment>, затем в предпоследнем, пред-предпоследнем и так до первого?
p.s.: пытался применить "array_reverse", никак не помогло - или переворачивает не те теги, или php выдает ошибки.
Спустя 5 часов, 49 минут, 15 секунд (30.01.2009 - 20:30) Sylex написал(а):
я думаю смотреть нужно где-то здесь:
PHP |
$file = file_get_contents($document); |
p.s. для того чтобы вам больше помогали - ставим подсветку кода и урезаем код до минимума
Спустя 1 час, 22 минуты, 27 секунд (30.01.2009 - 21:52) Yurien написал(а):
Sylex, извините, просто не знал каким образом процитировать код.
Пробовал
Пробовал
PHP |
$file = file_get_contents($document); |
изменить как
PHP |
$file = array_reverse($file, true) |
но в таком случае php выдает ошибку о том, что функция может относиться только к массиву. array_flip() тоже не помогает.
PHP |
$parser = xml_parser_create(""); |
Спустя -1 лет, 11 месяцев, 27 дней, 15 часов, 4 минуты, 15 секунд (2.02.2009 - 12:56) Guest написал(а):
Пожалуйста, кто-нибудь подскажите...
Спустя 7 минут, 57 секунд (2.02.2009 - 13:04) kirik написал(а):
Попробуйте заменить $file = file_get_contents($document); на $file = implode(null, array_reverse(file($document)));
Спустя 1 час, 13 минут, 35 секунд (2.02.2009 - 14:18) Sylex написал(а):
kirik
не поможет.. надо же не по строкам перевернуть
не поможет.. надо же не по строкам перевернуть
Спустя 1 час, 15 минут, 48 секунд (2.02.2009 - 15:34) Sylex написал(а):
Спустя 3 часа, 6 минут, 26 секунд (2.02.2009 - 18:40) kirik написал(а):
Sylex, cори, не увидел
Спустя 1 день, 1 час, 24 минуты, 13 секунд (3.02.2009 - 20:04) Guest написал(а):
Читал, пытался снова ковырять скрипт, ничего не получается.
Спустя 1 час, 8 минут, 16 секунд (3.02.2009 - 21:13) Sylex написал(а):
печально
Спустя 16 часов, 56 минут, 53 секунды (4.02.2009 - 14:09) Guest написал(а):
В принципе у меня есть идея, как решить эту проблему - исправить скрипт, записывающий данные в xml-документ таким образом, чтобы тег <comment> вставлялся сразу после корневого элемента <document>.
PHP |
global $link, $date, $name, $city, $mail, $comment, $file; |
но пытки над переменными при помощи insertBefore() не помогают...вообще обидно что не выходит.
Спустя 2 часа, 27 минут, 26 секунд (4.02.2009 - 16:37) Sylex написал(а):
Спустя 20 дней, 18 часов, 45 минут, 2 секунды (25.02.2009 - 11:22) Yurien написал(а):
Sylex, нет, не раскусил я истины. При описанном методе выдается ошибка, что с объектом нельзя работать как со строкой.
Вы не знаете, как корректно указать в скрипте вставить элемент <comment> самым первым, а не последнем (но перед <document>)?
Вы не знаете, как корректно указать в скрипте вставить элемент <comment> самым первым, а не последнем (но перед <document>)?
PHP |
global $link, $date, $name, $city, $mail, $comment, $file; |