Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Парсер файла (https://javascript.ru/forum/misc/53449-parser-fajjla.html)

Denis_Artamonov 04.02.2015 18:39

Парсер файла
 
Здравствуйте!
имеется такой вот код, она парсит файл, узнает значение атрибута 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>';	
		}

Denis_Artamonov 05.02.2015 07:37

никто не знает?

ksa 05.02.2015 08:27

Цитата:

Сообщение от Denis_Artamonov
она парсит файл, узнает значение атрибута CONDITION_ID и в зависимости от значения должен присвоить значение переменной KALITKA, но почему-то значение калитке не присваивается ...
подскажите почему такое может быть?

Потестируй его - ответ и найдется. ;)

Denis_Artamonov 05.02.2015 09:28

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] или нет :(

ksa 05.02.2015 09:53

Цитата:

Сообщение от Denis_Artamonov (Сообщение 355069)
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);

Что будет в алерте?

ksa 05.02.2015 09:56

Цитата:

Сообщение от Denis_Artamonov
COM_SECT_ITEMS.length;

Чему оно у тебя равно? :)

Denis_Artamonov 05.02.2015 10:44

Цитата:

Сообщение от ksa (Сообщение 355077)
Что будет в алерте?

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 (Сообщение 355077)
Чему оно у тебя равно?

у каждого SECT_GATESn[i] разное количество COM_SECT_ITEMS

ksa 05.02.2015 11:40

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);

Ты вообще, что хочешь получить в итоге?
Поскольку менять в цикле значения "шило" на "мыло" в некой переменной бессмысленно.

Denis_Artamonov 05.02.2015 12:10

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)

ksa 05.02.2015 13:28

Цитата:

Сообщение от Denis_Artamonov
хочу поставить букву "К", если хотя бы один атрибут CONDITION_ID у узла SECT_GATESn равен (31, 206, 512)

Хотение это одно... А реализация совсем другое.
Ты присваиваешь значение переменной в каждой (!) итерации цикла.
Это тебе понятно?


Часовой пояс GMT +3, время: 06:42.