Работа c xml в PHP

K4
На сайте с 14.06.2010
Offline
0
704

Привет всем!

Есть такой xml файл:

<?xml version="1.0" encoding="UTF-8"?>

<player_stats_templates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../stats.xsd">

<player_stats class="ASSASSIN" level="9">
<stats_template maxHp="612" maxMp="730" />
</player_stats>

<player_stats class="ASSASSIN" level="10">
<stats_template maxHp="670" maxMp="800" />
</player_stats>
...
</player_stats_templates>

Есть переменная $level, в которой есть число, например 9, функция должна высунуть оттуда MaxHp и MaxMp, тоесть 612 и 730. Помогите пожалуйста сделать эту функцию

Спасибо!

AlikZP
На сайте с 22.11.2009
Offline
107
#1

http://php.su/functions/?cat=simplexml

В частности

Пример 4. Using attributes

Website CMS: быстрая, удобная, недорогая! Вечная лицензия за 45$ (/ru/forum/524503) Яся - быстрый поиск фото для товаров. OpenCart/ocStore. Дополнение. (/ru/forum/665287) Грамотная верстка ваших макетов (/ru/forum/comment/8853216)
A7
На сайте с 17.02.2010
Offline
5
#2

Один раз приходилось выдергивать атрибут

я это не делал вероятно не совсем правильно, но все же выдергивал хоть как то:)


foreach($rss->tcy[0]->attributes() as $a => $b)

if ($a == 'value')
....

у меня было

<tcy value="20" />

как понимаю я, надо юзать attributes()

ну а так сам с удовольствием послушаю более правильное решение

Динамическмй список dofollow-блогов (http://andruha-vorobyev.ru/spisok_dofollow_blogov)
K4
На сайте с 14.06.2010
Offline
0
#3
AlikZP:
http://php.su/functions/?cat=simplexml

В частности
Пример 4. Using attributes

Спасибо, но это не подходит, там текст надо искать в самих тегах, а не то что они закрывают

4arger
На сайте с 17.12.2008
Offline
95
#4


<?php
$string = <<<XML
<player_stats_templates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../stats.xsd">

<player_stats class="ASSASSIN" level="9">
<stats_template maxHp="612" maxMp="730" />
</player_stats>

<player_stats class="ASSASSIN" level="10">
<stats_template maxHp="670" maxMp="800" />
</player_stats>
</player_stats_templates>
XML;

$xml = simplexml_load_string($string);
foreach($xml->player_stats[0]->stats_template->attributes() as $a => $b) {
echo "$a ='$b'<br />";
}
?>
K4
На сайте с 14.06.2010
Offline
0
#5
4arger:

<?php
$string = <<<XML
<player_stats_templates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../stats.xsd">

<player_stats class="ASSASSIN" level="9">
<stats_template maxHp="612" maxMp="730" />
</player_stats>

<player_stats class="ASSASSIN" level="10">
<stats_template maxHp="670" maxMp="800" />
</player_stats>
</player_stats_templates>
XML;

$xml = simplexml_load_string($string);
foreach($xml->player_stats[0]->stats_template->attributes() as $a => $b) {
echo "$a ='$b'<br />";
}
?>

Спасибо, но как я понял он ищет по порядковому номеру 0, но надо чтобы искал по level, если в $level - 9, то надо чтобы искал блок с level="9". И еще у меня не текст, а template.xml который лежит в корне, я пытался его всунуть между <<<XML и XML; но у меня это не получилось.

4arger
На сайте с 17.12.2008
Offline
95
#6
Kopp42:
И еще у меня не текст, а template.xml который лежит в корне, я пытался его всунуть между <<<XML и XML; но у меня это не получилось.

simplexml_load_file

Kopp42:
Спасибо, но как я понял он ищет по порядковому номеру 0, но надо чтобы искал по level, если в $level - 9, то надо чтобы искал блок с level="9".

как вариант: обойти player_stats получить значения level, затем по нужному level достать maxHp и maxMp.

ps http://www.spravkaweb.ru/php/datafun/xml/simplexml

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий