Элементы XML на русском c xml_parser

Pavel_p

Новичок
Элементы XML на русском c xml_parser

Хочу разобрать файл в формате ComemerceML но получаю на выходе :

Array ( [ИХентШфШЪатнр] => 68748764 [ИХентШфШЪатнрВЊаталнве] => 68748764 [ЍаШУеннванШе] => SONY LCS-THA для T1 и ф-тов размеров 9,7x7x2см [РнХШтель] => 7885 )

как видно что там были следующие элементы
Идентификатор
ИдентификаторВКаталоге
Наименование
Родитель

как избежать такого искажения???
 

ustas

Элекомист №1
открой CommerML.biz
там написано <?xml version="1.0" encoding ="windows-1251"?>
а что у тебя?
 

Pavel_p

Новичок
не имеет значения я получил windows-1251 увидел такое - потом вручную преобразовал в utf-8 и поменял соответственно значение атррибута encoding результат тот же - наверное это сам php глючит - (ведь значения атрибутов нормально видны на русском без искажений)
я придумал несколько решений
1. просто менять русские ключевые слова ( наименования элементов и атрибутов на латинские буквосочетания - либо английские слова либо написаные по латински русские слова). и нормально их разбирать.
2. написать свой парсер - например битрикс для загрузки ассортимента не использует ни каких xml-функций php причина наверное в глючности. всё сделаноф ф-циями работы с текстом
3. самый остроумный :) - просто собирать искаженные ключевые слова и их использовать - например чтоб поймать идентификатор текущего элемента обращаться и по индексу "Идентификатор" и по индексу "ИХентШфШЪатнр" в массив атрибутов
 

ustas

Элекомист №1
php не глючит. кинь в pastle код. что то ты не то творишь
 

Pavel_p

Новичок
Код:
unset($MCONF);
require_once('conf.php');
require_once($BACK_PATH.'init.php');
require_once($BACK_PATH.'template.php');

$res = xml_parser_create();

function start_element($parser, $name, $attribs){
	global $n;
	//if($n++>100) return;
	print $name.'<br/>';
	print_r($attribs);
	print '<br>';
	
}

function end_element($parser, $name){
}


xml_parser_set_option($res,XML_OPTION_TARGET_ENCODING,'utf-8');
[b]xml_parser_set_option($res, XML_OPTION_CASE_FOLDING, false);[/b]

xml_set_element_handler($res,'start_element','end_element');
$f = implode("\r\n", file(PATH_site.'/fileadmin/discharge.xml'));
xml_parse($res,$f ,true);
всё дело оказалось в том что оно переводит в большие буквы все идентификаторы и элементов и атрибутов, а чтоб оно не переводило надо отключить case folding, либо грамотно настроить локаль (русский язык и кодировка utf-8). я выбираю первое.

вопрос исчерпан.

вопрос исчерпан
 
Сверху