Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.08.2008, 15:18
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 1  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Question XML посредствам PHP5 DOM

Появилась необходимость создать php скрипт генератор xml и его апдейта. Подскажите, где можно прочитать подробнее об этом. Интересует, как указывать положение куда нод будет добавлен.

Столкнулся с еще одной проблемой: все русские значения атрибутов, заменяются на их коды, например Андрей на 'Андрей' Как с этим бороться?


Последний раз редактировалось Rzer; 02.08.2008 в 17:42.
Старый 02.08.2008, 18:38
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
1. про ДОМ читаем тут:
http://il.php.net/manual/en/class.domdocument.php
С этим классом и нелатинскими символами есть определенный напряг, правда, очевидно сам класс написан в ИСО кодировке, изза чего он и конвертит все УТФ-8 строки, и никакие mb_[чего бы то ни было] не помогают...
Вышел из положения следующим образом:
сначала конвертил строку в http://il.php.net/manual/en/book.simplexml.php SimpleXML с последующим импортом его в DOMDocument.

ЗЫ. А до 8-го августа осталось меньше недели =))) (в этот день официально заканчивается поддержка ПХП4 )
__________________
Hell is the possibility of sanity

Старый 03.08.2008, 13:42
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 3  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Нашел оптимальное решение по скорости выполнения по твоей ссылке для удаления Юникода:

Код:
      file_put_contents('news.xml',encode_str($dom->saveXML(),"utf-8"));
		

		function encode_str($str, $encode_to = "unicode") {
		    $cp = Array (
		        "А" => "А", "а" => "а",
		        "Б" => "Б", "б" => "б",
		        "В" => "В", "в" => "в",
		        "Г" => "Г", "г" => "г",
		        "Д" => "Д", "д" => "д",
		        "Е" => "Е", "е" => "е",
		        "Ё" => "Ё", "ё" => "ё",
		        "Ж" => "Ж", "ж" => "ж",
		        "З" => "З", "з" => "з",
		        "И" => "И", "и" => "и",
		        "Й" => "Й", "й" => "й",
		        "К" => "К", "к" => "к",
		        "Л" => "Л", "л" => "л",
		        "М" => "М", "м" => "м",
		        "Н" => "Н", "н" => "н",
		        "О" => "О", "о" => "о",
		        "П" => "П", "п" => "п",
		        "Р" => "Р", "р" => "р",
		        "С" => "С", "с" => "с",
		        "Т" => "Т", "т" => "т",
		        "У" => "У", "у" => "у",
		        "Ф" => "Ф", "ф" => "ф",
		        "Х" => "Х", "х" => "х",
		        "Ц" => "Ц", "ц" => "ц",
		        "Ч" => "Ч", "ч" => "ч",
		        "Ш" => "Ш", "ш" => "ш",
		        "Щ" => "Щ", "щ" => "щ",
		        "Ъ" => "Ъ", "ъ" => "ъ",
		        "Ы" => "Ы", "ы" => "ы",
		        "Ь" => "Ь", "ь" => "ь",
		        "Э" => "Э", "э" => "э",
		        "Ю" => "Ю", "ю" => "ю",
		        "Я" => "Я", "я" => "я"
		    );
		   
		    if ($encode_to == "unicode") {
		        $str = strtr($str, $cp);
		    } else {
		        foreach ($cp as $c) {
		            $cpp[$c] = array_search($c, $cp);
		        }
		        $str = strtr($str, $cpp);
		    }
		   
		    return $str;
		}
Теперь новая проблема - в XML у меня идут подряд несколько CDATA нодов. Flash при отсутствии переносов строки возвращет 1 в строке xml.children().length(), если переносы есть тогда все верно. Не понимаю как отформатировать xml, созданный DOM'ом.
з.ы: Нашел универсальное решение - доббавлять DOMFragment (но это не очень красиво)

На всякий случай: чтобы вставить нод вначале, а не в конце документа нужно использовать insertBefore, например у нас есть xml:

Код:
<root>
<event>2</event>
<event>3</event>
</root>
и php код:
Код:
$root = $dom->getElementsByTagName('news')->item(0);
$firstevent = $dom->getElementsByTagName('event')->item(0);
$element = $dom->createElement('event');
$newnode = $root->insertBefore($element, $firstevent);


Последний раз редактировалось Rzer; 03.08.2008 в 14:24.
Старый 03.08.2008, 15:28
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну это хорошо, если только русские буквы будут =) а что если какие-нть другие? =)
Я вот так вот делал, мб по скорости и не самое быстрое, зато не нужно заморачиваться с подстановками/перестановками =)
Код:
<?php 
class PostXML extends DOMDocument { 
    private $src; 
    function __construct() { 
        parent::__construct("1.0", "utf-8"); 
        if(isset($GLOBALS["HTTP_RAW_POST_DATA"])){ 
            $this->src = trim($GLOBALS["HTTP_RAW_POST_DATA"]); 
            $sxml = simplexml_load_string($this->src); 
            $dxml = $this->importNode(dom_import_simplexml($sxml), true); 
            $this->appendChild($dxml); 
        } else { 
            $nodata = $this->appendChild($this->createElement("noData")); 
            $nodata->appendChild($this->createTextNode("No data posted!")); 
        } 
    } 
    /** 
     * @return string 
     */ 
    function toString() { 
        $this->formatOutput = true; 
        return $this->saveXML(); 
    } 
} 
?>
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:52.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.