Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.02.2015, 18:39
Интересующийся
Отправить личное сообщение для Denis_Artamonov Посмотреть профиль Найти все сообщения от Denis_Artamonov
 
Регистрация: 04.02.2015
Сообщений: 13

Парсер файла
Здравствуйте!
имеется такой вот код, она парсит файл, узнает значение атрибута CONDITION_ID и в зависимости от значения должен присвоить значение переменной KALITKA, но почему-то значение калитке не присваивается ...
подскажите почему такое может быть?
разбираемый файл http://portal.sibprofi-web.ru/import/%D0%9E%D0%9E%D0%9E_%D0%92%D1%85%D0%BE%D0%B4%D0%BD% D1%8B%D0%B5%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1 %8B__4493_%D0%A1%D0%92.xml
function Parse_GatesCust(){
		ConnectToFile();

		SECT_GATESn = xmlDoc.documentElement.lastChild.firstChild.lastChild.childNodes;

		for (var i = 0; i < SECT_GATESn.length; i++){

			WIDTH = (SECT_GATESn[i].getAttribute("WIDTH").replace(",","."))*1000;
			HEIGHT = (SECT_GATESn[i].getAttribute("HEIGHT").replace(",","."))*1000;

			COLOR = SECT_GATESn[i].getAttribute("COLOR");
				if(COLOR == "Dark Oak" || COLOR == "Golden Oak"){COLOR = "RAL Oak";}
				else{if(COLOR == "ADS703"){COLOR = "RAL S703";}}

			COM_SECT_ITEMS = SECT_GATESn[i].getElementsByTagName("Com_Sect_Items");

			for (var j = 0; j < COM_SECT_ITEMS.length; j++){
				CONDITION_ID = COM_SECT_ITEMS[j].getAttribute("CONDITION_ID");
				if(CONDITION_ID == 31 || CONDITION_ID == 206 || CONDITION_ID == 512){
					KALITKA = "К, ";
				}
				else{
					KALITKA = "";
				}
			}


			NAME = "Ворота секционные СПР " + WIDTH + "x" + HEIGHT  + ", " + KALITKA + COLOR;

			console.log(NAME);
			//document.getElementById('positions_list').innerHTML += NAME + '<br>';	
		}
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2015, 07:37
Интересующийся
Отправить личное сообщение для Denis_Artamonov Посмотреть профиль Найти все сообщения от Denis_Artamonov
 
Регистрация: 04.02.2015
Сообщений: 13

никто не знает?
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2015, 08:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Denis_Artamonov
она парсит файл, узнает значение атрибута CONDITION_ID и в зависимости от значения должен присвоить значение переменной KALITKA, но почему-то значение калитке не присваивается ...
подскажите почему такое может быть?
Потестируй его - ответ и найдется.
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2015, 09:28
Интересующийся
Отправить личное сообщение для Denis_Artamonov Посмотреть профиль Найти все сообщения от Denis_Artamonov
 
Регистрация: 04.02.2015
Сообщений: 13

for (var j = 0; j < COM_SECT_ITEMS.length; j++){
				CONDITION_ID = COM_SECT_ITEMS[j].getAttribute("CONDITION_ID");
				if(CONDITION_ID == 31 || CONDITION_ID == 206 || CONDITION_ID == 512){
					KALITKA = "К, ";
				}
				else{
					KALITKA = "";
				}
//здесь например
			}

если выводим KALITKA здесь, т.е. в этом же цикле, тогда значение калитке присваивается

а если начинаем выводить за пределами цикла, то не присваивается

пробовал объявить переменную KALITKA до цикла, но все равно не присваивает

что-то уже и не знаю, как тестировать, от того и обратился сюда

мне всего-то нужно узнать ставить "К, " SECT_GATESn[i] или нет

Последний раз редактировалось Denis_Artamonov, 05.02.2015 в 09:33.
Ответить с цитированием
  #5 (permalink)  
Старый 05.02.2015, 09:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Denis_Artamonov Посмотреть сообщение
for (var j = 0; j < COM_SECT_ITEMS.length; j++){
				CONDITION_ID = COM_SECT_ITEMS[j].getAttribute("CONDITION_ID");
				if(CONDITION_ID == 31 || CONDITION_ID == 206 || CONDITION_ID == 512){
					KALITKA = "К, ";
				}
				else{
					KALITKA = "";
				}
//здесь например
			}

если выводим KALITKA здесь, т.е. в этом же цикле, тогда значение калитке присваивается

а если начинаем выводить за пределами цикла, то не присваивается
Если вот так

KALITKA = "нет значения";
			for (var j = 0; j < COM_SECT_ITEMS.length; j++){
				CONDITION_ID = COM_SECT_ITEMS[j].getAttribute("CONDITION_ID");
				if(CONDITION_ID == 31 || CONDITION_ID == 206 || CONDITION_ID == 512){
					KALITKA = "К, ";
				}
				else{
					KALITKA = "";
				}
//здесь например
			}
alert(KALITKA);

Что будет в алерте?
Ответить с цитированием
  #6 (permalink)  
Старый 05.02.2015, 09:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Denis_Artamonov
COM_SECT_ITEMS.length;
Чему оно у тебя равно?
Ответить с цитированием
  #7 (permalink)  
Старый 05.02.2015, 10:44
Интересующийся
Отправить личное сообщение для Denis_Artamonov Посмотреть профиль Найти все сообщения от Denis_Artamonov
 
Регистрация: 04.02.2015
Сообщений: 13

Сообщение от ksa Посмотреть сообщение
Что будет в алерте?
KALITKA = "нет значения";

			for (var j = 0; j < COM_SECT_ITEMS.length; j++){
				CONDITION_ID = COM_SECT_ITEMS[j].getAttribute("CONDITION_ID");
				if(CONDITION_ID == 31 || CONDITION_ID == 206 || CONDITION_ID == 512){
					KALITKA = "К, ";
				}
				else{
					KALITKA = "берет это значение";
				}
			}

			alert(KALITKA);

выводит последнее значение калитки (KALITKA = "берет это значение"


Сообщение от ksa Посмотреть сообщение
Чему оно у тебя равно?
у каждого SECT_GATESn[i] разное количество COM_SECT_ITEMS
Ответить с цитированием
  #8 (permalink)  
Старый 05.02.2015, 11:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Denis_Artamonov, ты вообще понимаешь функциональность своего кода?
У тебя в цикле при каждой итерации что-то присваивается той "калитке"...
Вот иллюстрация

KALITKA = "";
			for (var j = 0; j < COM_SECT_ITEMS.length; j++){
				CONDITION_ID = COM_SECT_ITEMS[j].getAttribute("CONDITION_ID");
				if(CONDITION_ID == 31 || CONDITION_ID == 206 || CONDITION_ID == 512){
					KALITKA = KALITKA+"К, "+'/';
				}
				else{
					KALITKA = KALITKA+""+'/';
				}
//здесь например
			}
alert(KALITKA);

Ты вообще, что хочешь получить в итоге?
Поскольку менять в цикле значения "шило" на "мыло" в некой переменной бессмысленно.
Ответить с цитированием
  #9 (permalink)  
Старый 05.02.2015, 12:10
Интересующийся
Отправить личное сообщение для Denis_Artamonov Посмотреть профиль Найти все сообщения от Denis_Artamonov
 
Регистрация: 04.02.2015
Сообщений: 13

function Parse_GatesCust(){
		ConnectToFile();

		SECT_GATESn = xmlDoc.documentElement.lastChild.firstChild.lastChild.childNodes;

		for (var i = 0; i < SECT_GATESn.length; i++){

			WIDTH = (SECT_GATESn[i].getAttribute("WIDTH").replace(",","."))*1000;
			HEIGHT = (SECT_GATESn[i].getAttribute("HEIGHT").replace(",","."))*1000;

			COLOR = SECT_GATESn[i].getAttribute("COLOR");
				if(COLOR == "Dark Oak" || COLOR == "Golden Oak"){COLOR = "RAL Oak";}
				else{if(COLOR == "ADS703"){COLOR = "RAL S703";}}

			COM_SECT_ITEMS = SECT_GATESn[i].getElementsByTagName("Com_Sect_Items");

			for (var j = 0; j < COM_SECT_ITEMS.length; j++){
				CONDITION_ID = COM_SECT_ITEMS[j].getAttribute("CONDITION_ID");
				if(CONDITION_ID == 31 || CONDITION_ID == 206 || CONDITION_ID == 512){
					KALITKA = "К, ";
				}
				else{
					KALITKA = "";
				}
			}


			NAME = "Ворота секционные СПР " + WIDTH + "x" + HEIGHT  + ", " + KALITKA + COLOR;

			console.log(NAME);
			//document.getElementById('positions_list').innerHTML += NAME + '<br>';	
		}


хочу поставить букву "К", если хотя бы один атрибут CONDITION_ID у узла SECT_GATESn равен (31, 206, 512)
Ответить с цитированием
  #10 (permalink)  
Старый 05.02.2015, 13:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Denis_Artamonov
хочу поставить букву "К", если хотя бы один атрибут CONDITION_ID у узла SECT_GATESn равен (31, 206, 512)
Хотение это одно... А реализация совсем другое.
Ты присваиваешь значение переменной в каждой (!) итерации цикла.
Это тебе понятно?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсер XML на Jquery Batyabest Events/DOM/Window 2 04.10.2014 19:07
Как изменить имя скачиваемого файла? Dimaz Общие вопросы Javascript 4 13.09.2014 16:25
Подгрузка информации через DIV с обработкой файла на стороне сервера Azartno jQuery 1 26.05.2012 15:07
Как узнать размер загружаемого файла? shkarbatov Серверные языки и технологии 5 14.08.2011 17:12
Проблема с загрузкой файла на сервер shkarbatov Серверные языки и технологии 8 13.08.2011 01:27