Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбор xml 
:(
    Опции темы
MrDmitry
Дата 19.3.2013, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Есть xml файл следуещего вида


Код

<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book>
  <character> 
    <object id="1">
     </object>
  </charackter>
 </book>
</books>


Нужно в родителя <book> добовлять новый  <object > при этом увеличивая id

Попытался сделать так


Код

    $pars = simplexml_load_file('books.xml');
     foreach ($pars->character as $objects)
      $objects_id++;                 
       $new_objects= $pars->book->character->addChild('objects');
       $new_objects->addAttribute('id', $objects_id.'1'); 
       $pars->asXML('books.xml'); 



Но у меня возникло несколько сложностей.

Во первых. Новый элемент добовляется в одну строчку. Во вторых не закрытым. Тоесть получается xml

Код

<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book>
  <character> 
    <objects id="1">
     </objects>
   <objects id="1"/><objects id="1"/><objects id="1"/><objects id="1"/>
  </charackter>
 </book>
</books>


А во вторых счетчик $objects_id не увеличывается. Что я делаю не так? (




Это сообщение отредактировал(а) MrDmitry - 19.3.2013, 02:14
PM MAIL   Вверх
Sanchezzz
Дата 19.3.2013, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



<objects id="1"/> А разве "/>" Это не означает что тег закрыт.
Попробуйте указать  2 параметр у addChild

Код

$new_objects = $pars->book->character->addChild('objects',' ');
 
Посмотрите пример в документации 

Это сообщение отредактировал(а) Sanchezzz - 19.3.2013, 06:09


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
krypt3r
Дата 19.3.2013, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 3
Всего: 16



Что-то типа такого кода.
Код

<?php
$xml = <<< XML
<books>
    <book>
        <character>
            <object id="1"></object>
            <object id="4"></object>
            <object id="2"></object>
            <object id="3"></object>
        </character>
    </book>
</books>
XML;
$sim = simplexml_load_string ($xml);
//print_r ($sim);
$chars = $sim->book->character;
foreach ($chars as $ch)
{
    // определение максимального object[@id]
    $ids = array ();
    $objs = $ch->object;
    foreach ($objs as $ob)
        $ids[] = (int) $ob->attributes()->id;
    sort ($ids);
    $object_id = max ($ids) + 1;
    
    // кол-во вставляемых элементов
    $count = 3;
    for ($i = 0; $i < $count; $i++)
    {
        $new_obj = $ch->addChild ('object');
        $new_obj->addAttribute ('id', $object_id++);
    }
}
echo $sim->asXML ();
?>

Цитата
Во первых. Новый элемент добовляется в одну строчку. Во вторых не закрытым.

XML вы неважно знаете. Он может быть вообще в одну строку, главное - чтобы был валидным. А якобы незакрытый тэг
Код

<object id="1"/>

это более краткая запись пустого тэга
Код

<object id="1"></object>


PM MAIL   Вверх
MrDmitry
Дата 20.3.2013, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Ок. Спасибо. Вы правы xml я знаю не достаточно хорошо.
PM MAIL   Вверх
MrDmitry
Дата 13.10.2013, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Извиняюсь что поднимаю старую тему но появился вопрос. 

А как посчитать id если не ограничено кол-во вложенных элементов?


Код

<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book>
  <character> 
    <objects id="1"/>
   
  <objects id="2"><objects id="3"></objects></objects>
 <objects id="4"><objects id="5"><objects id="6"><objects id="7"></objects></objects></objects></objects>
  <objects id="8"><objects id="9"></objects></objects>
<objects id="10"/>
  </character>
 </book>
</books>


Это сообщение отредактировал(а) MrDmitry - 13.10.2013, 05:09
PM MAIL   Вверх
Sanchezzz
Дата 13.10.2013, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Рекурсией от родителя.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
MrDmitry
Дата 13.10.2013, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Облазил google не нашел стоящей темы как сделать рекурсия xml на php (
Можно код или хорошую ссылку на эту тему?
PM MAIL   Вверх
Sanchezzz
Дата 14.10.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Рекурсия это метод, который вызывает сам себя пока не упрется в препятствие...


Код

function recursion_simple_xml($xml){    
    foreach($xml as $item){
    
        // delaem s elementom chto nado
    
        if(isset($item->objects)){
            // zapusk rekirsii
            recursion_simple_xml($item->objects);
        }
    }
}




$xml_string = '<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book>
  <character> 
    <objects id="1"/>
   
  <objects id="2"><objects id="3"></objects></objects>
 <objects id="4"><objects id="5"><objects id="6"><objects id="7"></objects></objects></objects></objects>
  <objects id="8"><objects id="9"></objects></objects>
<objects id="10"/>
  </character>
 </book>
</books>';

$xml = simplexml_load_string ($xml_string);
$xml = $xml->book->character;

recursion_simple_xml($xml);




--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0995 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.