Парсер xml'ки - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > PHP

PHP Форум как для начинающих программистов на PHP так и для профессионалов этого дела. Если нужно создать скрипт, функцию и т.д, но не знаете как, спросите у нас и мы вам подскажем. Здесь вы найдете примеры скриптов которые вы сможете использовать на сайтах своих серверов (онлайн, регистрация, семь печатей, топ игроков). Так же много книг и статей.

Ответ
Опции темы
Непрочитано 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™ Ответить с цитированием
Непрочитано 03.05.2012, 11:13   #2
Пользователь

По умолчанию Re: Парсер xml'ки

как вариант

PHP код:
foreach($xml->npc as $npcElement) {
    foreach(
$npcElement->set as $setElement) {
        if (
$setElement->name == "aggroRange") {}
    }
    ...

http://php.net/manual/en/simplexml.examples-basic.php
__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Aquanox вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 03.05.2012, 11:39   #3
Герой

Автор темы (Топик Стартер) Re: Парсер xml'ки

Ну так это аналогия моего кода для вытаскивания из тега <set>, а теперь мне надо иное. Как переделать пока не понимаю...
Shayne вне форума Отправить сообщение для Shayne с помощью Skype™ Ответить с цитированием
Непрочитано 03.05.2012, 16:02   #4
Пользователь

По умолчанию Re: Парсер xml'ки

Вроде пример понятный был... вот детальнее

PHP код:
foreach($xml->npc as $npcElement) {
    
$npcId = (string)$npcElement["npc"];
    foreach(
$npcElement->rewardlist as $rewardListElement) {
          
$gChance = (string) $rewardListElement["chance"];
          foreach(
$rewardListElement as $groupElement) {
                foreach(
$groupElement->reward as $rewardElement) {
                   .... 
                   
                   
printf("%d %d... " $npcId, ... )
                }
          }
    }
    ...

__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Aquanox вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 03.05.2012, 17:24   #5
Герой

Автор темы (Топик Стартер) Re: Парсер xml'ки

ооо, дошло, спасибо большое, дооформлю форматный вывод и выкину что вышло.
upd:
PHP код:
<?php
set_time_limit
(0);
$xml simplexml_load_file('18900-18999.xml');

foreach(
$xml->npc as $npcElement

    
$npcId = (string)$npcElement["id"]; 
    foreach(
$npcElement->rewardlist as $rewardListElement
    { 
        foreach(
$rewardListElement->group as $groupElement
            {
                
$gChance = (string)$groupElement["chance"]; 
                foreach(
$groupElement->reward as $rewardElement
                { 
                    
$rewardID = (string)$rewardElement["item_id"]; 
                    
$rewardMIN = (string)$rewardElement["min"]; 
                    
$rewardMAX = (string)$rewardElement["max"]; 
                    
$rewardCHANCE = (string)$rewardElement["chance"]; 
                    
$endCHANCE$gChance/100*$rewardCHANCE;
                    
printf("%d    %d    %d-%d    %6.4f</br>",$npcId$rewardID$rewardMIN$rewardMAX,$endCHANCE);
                } 
            } 
    } 

?>
осталось придумать как заменить id на название предмета...

Последний раз редактировалось Shayne; 03.05.2012 в 19:15.
Shayne вне форума Отправить сообщение для Shayne с помощью Skype™ Ответить с цитированием
Непрочитано 04.05.2012, 12:02   #6
Пользователь

По умолчанию Re: Парсер xml'ки

Составь из клиентских данных таблицу код->название (распарсив itemname.dat etc) и поместив все это например в CSV, затем загружать в процессе работы для замены кода на название.

PHP код:
$nameData = array();
foreach(
loadCSV('names.csv') as $csvLine) {
  
$nameData[0] = $nameData[1];


...
$itemName $nameData[$rewardId];
... 
__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Aquanox вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 04.05.2012, 13:20   #7
Герой

Автор темы (Топик Стартер) Re: Парсер xml'ки

Цитата:
Сообщение от Aquanox Посмотреть сообщение
Составь из клиентских данных таблицу код->название (распарсив itemname.dat etc) и поместив все это например в CSV
Сделал через эксель и парсеры тут в общем то не нужны...

Цитата:
Сообщение от Aquanox Посмотреть сообщение
затем загружать в процессе работы для замены кода на название.

PHP код:
$nameData = array();
foreach(
loadCSV('names.csv') as $csvLine) {
  
$nameData[0] = $nameData[1];


...
$itemName $nameData[$rewardId];
... 
А вот тут не осилил...
Shayne вне форума Отправить сообщение для Shayne с помощью Skype™ Ответить с цитированием
Непрочитано 04.05.2012, 14:47   #8
Аватар для VISTALL
Illussion is real

По умолчанию Re: Парсер xml'ки

Цитата:
Сообщение от Shayne Посмотреть сообщение
Сделал через эксель и парсеры тут в общем то не нужны...


А вот тут не осилил...
я могу дать XML вид для itemname.dat

 
<out name="dec-ItemName-e.dat">
	<data>
		<item_id>17</item_id>
		<name>Wooden Arrow</name>
		<additionalname></additionalname>
		<popup>An arrow made of wood. It is an arrow used for a no grade bow.</popup>
		<description>-1</description>
		<unknown_1>0</unknown_1>
		<unknown_2>0</unknown_2>
		<set_enchant_count>0</set_enchant_count>
		<set_enchant_effect></set_enchant_effect>
		<color>1</color>
	</data>
 
Code: XML
дайте ток файлы
__________________
consulo.io - Consulo - multi-language IDE
VISTALL на форуме Ответить с цитированием
Непрочитано 04.05.2012, 15:17   #9
Герой

Автор темы (Топик Стартер) Re: Парсер xml'ки

Было бы очень кстати. Itemname-ru, Itemname-e
Shayne вне форума Отправить сообщение для Shayne с помощью Skype™ Ответить с цитированием
Непрочитано 04.05.2012, 15:41   #10
Аватар для VISTALL
Illussion is real

По умолчанию Re: Парсер xml'ки

Цитата:
Сообщение от Shayne Посмотреть сообщение
Было бы очень кстати. Itemname-ru, Itemname-e
дайте датники плз
__________________
consulo.io - Consulo - multi-language IDE
VISTALL на форуме Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсер для AION zorgtm Серверная часть 41 30.09.2013 17:53
Java Mmotops парсер Хлорка Lineage II 1 08.04.2012 23:20
Парсер email ruslanback Курилка / Yak floor 17 26.03.2012 23:08


© 2007–2020 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 22:39. Часовой пояс GMT +3.

Вверх