Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Парсинг xml со сложной структурой и зависимостью от содержания (https://javascript.ru/forum/jquery/54149-parsing-xml-so-slozhnojj-strukturojj-i-zavisimostyu-ot-soderzhaniya.html)

idib.js 05.03.2015 18:08

Парсинг xml со сложной структурой и зависимостью от содержания
 
здравствуйте форумчане
я совсем новичок могу сказать что знаю с/с++, java и другие языки для pc на jq только копировал уже готовые скрипты ну на сколько разобрался так что не ругайте
после клика должен от паристся xml
в xml структуре мы сначала заходим в start узнаем с чего можно начать
и потом с помощью великого рандом пыгаем как в примере в start_0
потом в start_1 или start_2 и так далее
походу мы достаем текст и добавляем его в #text_class
скрипт не работает можете помочь его оживить или порекомендовать как нибудь по другому это реализовать

заранее спасибо

вот xml
<?xml version="1.0" encoding="utf-8" ?>
<page>
	<start>
		<ligament>
			start_0
		</ligament>
	</start>
	<start_0>
		<ligament>
			start_1
			start_2
		</ligament>
		<text>
			сначала это
		</text>
	</start_0>
	<start_1>
		<ligament>
			Null
		</ligament>
		<text>
			только началось и законцилость
		</text>
		</body>
	</start_1>
	<start_2>
		<ligament>
			start_3
			start_4
		</ligament>
		<text>
			а потом вариант 1 @NAME@ 
		</text>
	</start_2>
	<start_3>
		<ligament>
			start_4
		</ligament>
		<text>
			а можетбыть и 2
		</text>
	</start_3>
	<start_4>
		<ligament>
			Null
		</ligament>
		<text>
			а потом вариант 3
		</text>
	</start_4>
</page>

вот js
function lala(){ //функция запускается по клику 
//..................
        generet();
	xmlParser();
}

function generet()
{
	$.ajax({
        type: "GET",
        url: "xml/text.xml",
        dataType: "xml",
        success: xmlParser
    });
}

function xmlParser(xml) {
    $('#load').fadeOut();
	var next;
	$(xml).find("start").each(function () {
		next = next_text($(this).find("ligament").text());
	});
	while(next != "Null"){
		$("#text_class").append(textt($(xml).find(next).find("text").text()));
		next = next_text($(xml).find(next).find("ligament").text());
		$("next").fadeIn(1000);
	}
	
}

function next_text(input){
	arr = input.split("\n ");
	return arr[Math.floor(Math.random()*arr.length)];
}

function textt(input)
{
	return replace(new RegExp("@NAME@",'g'),name);
}

danik.js 05.03.2015 22:57

Ну и шляпа... А без XML никак? Есть же няшный JSON.

krasovsky 06.03.2015 07:50

Зачем тебе разные теги start,start_1,start_2? Я вижу что никакой полезной нагрузки в них нет,а наоборот. ты сначала находишь все теги старт .find("start") - 1 шт, а потому по всем найденным организуешь цикл .each, цикл из 1го элемента.....И в цикле записываешь в одну и ту же переменную новое значение. То есть на выходе в переменной next будет значение последней итерации. Это в си++ али java так делают?)
И только потом начнется еще один цикл while, тоже их 1 итерации. Его надо заменить на if и переместить внутрь цикла each

Пусть все будут просто start. Тогда будет работать. И вообще лучше json как сказали уже.


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