![]() |
|
||||||||||
|
|||||
|
Появилась необходимость создать php скрипт генератор xml и его апдейта. Подскажите, где можно прочитать подробнее об этом. Интересует, как указывать положение куда нод будет добавлен.
Столкнулся с еще одной проблемой: все русские значения атрибутов, заменяются на их коды, например Андрей на 'Андрей' Как с этим бороться?
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 02.08.2008 в 17:42. |
|
|||||
|
Modus ponens
|
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 |
|
|||||
|
Нашел оптимальное решение по скорости выполнения по твоей ссылке для удаления Юникода:
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;
}
з.ы: Нашел универсальное решение - доббавлять DOMFragment (но это не очень красиво) На всякий случай: чтобы вставить нод вначале, а не в конце документа нужно использовать insertBefore, например у нас есть xml: и php код:
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 03.08.2008 в 14:24. |
|
|||||
|
Modus ponens
|
Ну это хорошо, если только русские буквы будут =) а что если какие-нть другие? =)
Я вот так вот делал, мб по скорости и не самое быстрое, зато не нужно заморачиваться с подстановками/перестановками =) <?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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|