Показать сообщение отдельно
Непрочитано 02.05.2012, 23:55   #1
Герой

Автор темы (Топик Стартер) [Need help]Парсер xml'ки

Собственно имеем БД вида:
PHP код:
<?xml version="1.0" encoding="utf-8"?>
<list>
    <npc id="18910" name="Solina Knight Captain" title="">
        <set name="aggroRange" value="200" />
        <set name="ai_type" value="Fighter" />
        <set name="baseAtkRange" value="40" />
        <set name="baseCON" value="43" />
        <set name="baseCritRate" value="40" />
        <set name="baseDEX" value="30" />
        <set name="baseHpMax" value="3835.591" />
        <set name="baseHpRate" value="3" />
        <set name="baseHpReg" value="8.5" />
        <set name="baseINT" value="21" />
        <set name="baseMAtk" value="1457" />
        <set name="baseMAtkSpd" value="333" />
        <set name="baseMDef" value="494" />
        <set name="baseMEN" value="20" />
        <set name="baseMpMax" value="1777.4" />
        <set name="baseMpReg" value="3" />
        <set name="basePAtk" value="2250" />
        <set name="basePAtkSpd" value="253" />
        <set name="basePDef" value="609" />
        <set name="baseRunSpd" value="66" />
        <set name="baseSTR" value="40" />
        <set name="baseShldDef" value="0" />
        <set name="baseShldRate" value="0" />
        <set name="baseWIT" value="20" />
        <set name="baseWalkSpd" value="30" />
        <set name="collision_height" value="31.5" />
        <set name="collision_radius" value="14.0" />
        <set name="level" value="83" />
        <set name="rewardExp" value="44216" />
        <set name="rewardRp" value="0" />
        <set name="rewardSp" value="4545" />
        <set name="shots" value="NONE" />
        <set name="texture" value="LineageMonster5.solina_knight" />
        <set name="type" value="Monster" />
        <faction name="n_solina_clan" range="300"/>
        <skills>
            <skill id="4276" level="5" />    <!--Weak Point against Bow/Crossbow Weapons-->
            <skill id="4410" level="15" />    <!--Strong P. Atk.-->
            <skill id="4411" level="14" />    <!--Strong M. Atk.-->
            <skill id="4416" level="8" />    <!--Angels-->
            <skill id="5466" level="1" />    <!--Holy Attacks-->
            <skill id="5620" level="4" />    <!--Short-Range Physical Attack Weakness-->
            <skill id="6312" level="1" />    <!--Launch Sacred Sword Energy-->
            <skill id="6313" level="1" />    <!--Solina Bless-->
        </skills>
        <rewardlist type="RATED_GROUPED">
            <group chance="70.0">
                <reward item_id="57" min="1730" max="3492" chance="100.0000" />    <!--Adena-->
            </group>
            <group chance="1.3371">
                <reward item_id="14109" min="1" max="1" chance="0.0372" />    <!--Sealed Vesper Gauntlet-->
                <reward item_id="14113" min="1" max="1" chance="0.0372" />    <!--Sealed Vesper Leather Gloves-->
                <reward item_id="14116" min="1" max="1" chance="0.0372" />    <!--Sealed Vesper Gloves-->
                <reward item_id="14110" min="1" max="1" chance="0.0372" />    <!--Sealed Vesper Boots-->
                <reward item_id="14114" min="1" max="1" chance="0.0372" />    <!--Sealed Vesper Leather Boots-->
                <reward item_id="14117" min="1" max="1" chance="0.0372" />    <!--Sealed Vesper Shoes-->
                <reward item_id="15667" min="1" max="1" chance="16.6295" />    <!--Sealed Vesper Gauntlet Piece-->
                <reward item_id="15671" min="1" max="1" chance="16.6295" />    <!--Sealed Vesper Leather Gloves Piece-->
                <reward item_id="15674" min="1" max="1" chance="16.6295" />    <!--Sealed Vesper Gloves Piece-->
                <reward item_id="15668" min="1" max="1" chance="16.6295" />    <!--Sealed Vesper Boots Piece-->
                <reward item_id="15672" min="1" max="1" chance="16.6295" />    <!--Sealed Vesper Leather Boots Piece-->
                <reward item_id="15675" min="1" max="1" chance="16.6293" />    <!--Sealed Vesper Shoes Piece-->
            </group>
            <group chance="18.1342">
                <reward item_id="1895" min="1" max="1" chance="78.3705" />    <!--Metallic Fiber-->
                <reward item_id="4040" min="1" max="1" chance="5.4859" />    <!--Mold Lubricant-->
                <reward item_id="4042" min="1" max="1" chance="4.5716" />    <!--Enria-->
                <reward item_id="4043" min="1" max="1" chance="9.1432" />    <!--Asofe-->
                <reward item_id="10483" min="1" max="1" chance="1.9048" />    <!--Life Stone -  Level 82-->
                <reward item_id="10484" min="1" max="1" chance="0.4762" />    <!--Mid-Grade Life Stone -  Level 82-->
                <reward item_id="10485" min="1" max="1" chance="0.0478" />    <!--High-Grade Life Stone -  Level 82-->
            </group>
        </rewardlist>
        <rewardlist type="SWEEP">
            <reward item_id="15667" min="1" max="1" chance="1.3541" />    <!--Sealed Vesper Gauntlet Piece-->
            <reward item_id="15671" min="1" max="1" chance="1.3541" />    <!--Sealed Vesper Leather Gloves Piece-->
            <reward item_id="15674" min="1" max="1" chance="1.3541" />    <!--Sealed Vesper Gloves Piece-->
            <reward item_id="15668" min="1" max="1" chance="1.3541" />    <!--Sealed Vesper Boots Piece-->
            <reward item_id="15672" min="1" max="1" chance="1.3541" />    <!--Sealed Vesper Leather Boots Piece-->
            <reward item_id="15675" min="1" max="1" chance="1.3541" />    <!--Sealed Vesper Shoes Piece-->
            <reward item_id="15801" min="1" max="1" chance="0.1515" />    <!--Recipe - Sealed Vesper Gauntlet (60%) -->
            <reward item_id="15802" min="1" max="1" chance="0.1515" />    <!--Recipe - Sealed Vesper Leather Gloves (60%) -->
            <reward item_id="15803" min="1" max="1" chance="0.1515" />    <!--Recipe - Sealed Vesper Gloves (60%) -->
            <reward item_id="15804" min="1" max="1" chance="0.1515" />    <!--Recipe - Sealed Vesper Boots (60%) -->
            <reward item_id="15805" min="1" max="1" chance="0.1515" />    <!--Recipe - Sealed Vesper Leather Boots (60%) -->
            <reward item_id="15806" min="1" max="1" chance="0.1515" />    <!--Recipe - Sealed Vesper Shoes (60%) -->
        </rewardlist>
        <attributes>
            <attack attribute="holy" value="170" />
            <defence attribute="fire" value="200" />
            <defence attribute="water" value="200" />
            <defence attribute="wind" value="200" />
            <defence attribute="earth" value="150" />
            <defence attribute="holy" value="160" />
            <defence attribute="unholy" value="40" />
        </attributes>
        </npc>
</list>
Надо вытащить из нее дроп и привести к виду:
Код:
18900     Sealed Vesper Gauntlet 1-1  [1.3371 * 100 / 0.0372]
18900     Sealed Vesper Leather Gloves 1-1  [1.3371 * 100 / 0.0372]
и т.д.
Где 18900 - id моба (тег <npc id="xxx"...>)
Sealed Vesper Gauntlet - название предмета (тег <reward item_id="xxx"...>) - основная проблема почему создал тему, т.к. в самом теге нету названия итема есть только id. БД с id предметов тоже есть но как потом сопоставить... Понятия не имею. Либо вариант 2: вытаскивать из комментария справа.
1-1 - количество (тег <reward item_id="xxx" min="yyy" max="zzz">)
И еще одна вкусность - шанс составляется по формуле значение chance в теге <group chance="ххх"> умножить на 100 и делить на значение chance тега <reward item_id="" .... chance="yyy" />

P.S. Значения из тегов <set> доставал примерно так:
PHP код:
<?php
set_time_limit
(0);
$xml simplexml_load_file('1a.xml');

foreach (
$xml->xpath('/list/npc/set') as $set)
{
        if (
$set ["name"] == "aggroRange")
            echo 
$set ["value"];
}
?>
Но переделать под требуемое сейчас не смог...
P.S. Приму любую помощь. Cовет \ кусок кода \ куда копать \ готовый код О_О

Последний раз редактировалось Shayne; 03.05.2012 в 11:22.
Shayne вне форума Отправить сообщение для Shayne с помощью Skype™ Ответить с цитированием