![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Nov 2007
Сообщений: 28
|
Имею обрабатываемый отрезок xml:
<fresult t="9">
<i>
{exp3}
</i>
<i>
{m5}
</i>
<i>
{lvl2|str}
</i>
<i>
{skill3|1}
</i>
</fresult>
var i:int; var txt:String = '<b>Результаты боя:</b>\n\n'; for (i=0;i<_xml.fresult.children().length();i++) { txt += '\n\n- '+_xml.fresult.children()[i].toString(); } txt = txt.replace(/\{exp([0-9]+?)\}/,'Очков опыта получено: $1'); txt = txt.replace(/\{m([0-9]+?)\}/,'Монет получено: $1'); var lvl_reg:RegExp = /\{lvl([0-9]+?)\|(str|spd|agi)\}/; var lvl_matches:Array = txt.match(lvl_reg); if (lvl_matches) { var lvl_p:Array = new Array(); lvl_p['str'] = 'сила'; lvl_p['spd'] = 'скорость'; lvl_p['agi'] = 'ловкость'; txt = txt.replace(lvl_reg,'Вы перешли на '+lvl_matches[1]+'й уровень, '+lvl_p[lvl_matches[2]]+' увеличена на 1'); } var skill_reg:RegExp = /\{skill([0-9]+?)\|([0-9]+?)\}/; var skill_matches:Array = txt.match(skill_reg); if (skill_matches) { var s:Object = Main.skillInfo(skill_matches[1],skill_matches[2]); txt = txt.replace(skill_reg,'Изучен навык: '+s.n+' (уровень '+skill_matches[2]+')'); } Результаты боя: - Очков опыта получено: 3 - Монет получено: 5 - Вы перешли на 2й уровень, сила увеличена на 1 - Изучен навык: Мастер блокировки (уровень 1) Что сделал не так, что нужно исправить? Спасибо заранее. |
|
|||||
|
Регистрация: Jun 2006
Сообщений: 400
|
Можете выложить xml при котором сбоит?
|
|
|||||
|
Регистрация: Nov 2007
Сообщений: 28
|
Хорошо, правда остальная часть во-первых малопонятна посторонним, во-вторых не влияет на эту часть алгоритма. XML во всех тестах всегда один, этот:
<response>
<fighters s="1">
<f id="123" n="ЦарьЛеонидэ" hp="85" mn="50" mnmx="50" str="5" spd="2" agi="1" lvl="1">
<st race="4" sex="1" teeth="9" hair="3" haircolor="6" beard="7"/>
<q2>
Сосни!
</q2>
</f>
<f id="456" n="Адiк Гiтлер" hp="66" str="2" spd="1" agi="2" lvl="1">
<st race="3" sex="1" teeth="7" hair="1" haircolor="1" beard="0" hat="1" jacket="2" pants="1" cloak="1"/>
<q2>
Вытри сопли, слабак!
</q2>
<q3>
Я тебя найду и отомщу!
</q3>
</f>
</fighters>
<t n="1" p="1" mn="35" t="2" tl="1">
<h nhp="47" c="1"/>
<h e="1"/>
<h nhp="42"/>
<h nhp="37"/>
</t>
<t n="2" p="2" it="19" t="8" tl="3">
<h h="66"/>
</t>
<t n="3" p="2" t="h2">
<h nhp="62"/>
</t>
<t n="4" p="1" mn="5" t="1" tl="2">
<h nhp="0"/>
<h teeth="2" nhp="0" b="1"/>
</t>
<w n="1" t1="5" t2="4"/>
<fresult t="9">
<i>
{exp3}
</i>
<i>
{m5}
</i>
<i>
{lvl2|str}
</i>
<i>
{skill3|1}
</i>
</fresult>
</response>
|
|
|||||
|
Регистрация: Jun 2006
Сообщений: 400
|
Цитата:
Если во всех случаях поступает !одинаковый xml на вход, то должно всегда отрабатывать правильно, так? Значит что-то с xml не так все-таки. 100% одинаковый xml? пробовали его прям в код засунуть? И вы мне структуру xml показали вроде как. А что бы разобраться нужно смотреть именно то, что пришло. Непосредственно с параметрами. Скорей всего пробельчик какой проскакивает где-то. Последний раз редактировалось proxiServer; 18.02.2010 в 12:49. |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 28
|
Нашёл что-то:
for (i=0;i<_xml.fresult.children().length();i++) { txt += '\n\n- '+_xml.fresult.children()[i].toString(); } trace(txt+' (итого длина: '+_xml.fresult.children().length()+')'); Так вот иногда вместо 4 показывает собственно 2. Хотя у меня нигде нет строки, как-либо обрезающей _xml.fresult и его дочерние ветки. Добавлено через 6 минут Всё, проблема исчерпана, XML в этом месте как раз не был идентичен. Мой глюк Алгоритм абсолютно стабильный.Последний раз редактировалось Ануб; 18.02.2010 в 13:07. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|