За последние 24 часа нас посетили 22517 программистов и 1147 роботов. Сейчас ищут 614 программистов ...

замена значения в xml

Тема в разделе "Сделайте за меня", создана пользователем mrprometei, 10 июл 2016.

Метки:
  1. mrprometei

    mrprometei Новичок

    С нами с:
    23 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    добрый вечер гуру!

    Подскажите пожалуйста или направьте на какие то примеры что-то меня заклинило =)

    Имею файл xml около 20 мегабайт. Нужно немного его подредактировать.

    структура следующая
    HTML:
    1. </yml_catalog>
    2. </shop>
    3. <categories>
    4. <category id="526">главная кат.</category>
    5. <category id="731" parentId="526">подкатегории1</category>
    6. <category id="732" parentId="731">подкатегории2</category>
    7. <category id="2318" parentId="526">подкатегории3</category>
    8. </categories>
    9. </offers>
    10. <offer id="150066" available="true">
    11. <currencyId>RUR</currencyId>
    12. <categoryId>2318</categoryId>
    13. </offer>
    14.  
    15. <offer id="150077" available="true">
    16. <currencyId>RUR</currencyId>
    17. <categoryId>731</categoryId>
    18. </offer>
    19.  
    20. </offers>
    21. </shop>
    22. </yml_catalog>
    На выходе хотелось бы получить

    PHP:
    1. </offers>
    2. <offer id="150066" available="true">
    3. <currencyId>RUR</currencyId>
    4. <categoryId>подкатегории3</categoryId>
    5. <linkcat>главная кат.</linkcat>
    6. </offer>
    Перечитал документацию раза 4 что-то наверно закипел.
    Помогите пожалуйста или на правьте на пример для детей где на пальцах раскатывают.
     
  2. mrprometei

    mrprometei Новичок

    С нами с:
    23 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    добрый вечер гуру!

    Подскажите пожалуйста или направьте на какие то примеры что-то меня заклинило =)

    Имею файл xml около 20 мегабайт. Нужно немного его подредактировать.

    структура следующая
    PHP:
    1. </yml_catalog>
    2. </shop>
    3. <categories>
    4. <category id="526">главная кат.</category>
    5. <category id="731" parentId="526">подкатегории1</category>
    6. <category id="732" parentId="731">подкатегории2</category>
    7. <category id="2318" parentId="526">подкатегории3</category>
    8. </categories>
    9. </offers>
    10. <offer id="150066" available="true">
    11. <currencyId>RUR</currencyId>
    12. <categoryId>2318</categoryId>
    13. </offer>
    14.  
    15. <offer id="150077" available="true">
    16. <currencyId>RUR</currencyId>
    17. <categoryId>731</categoryId>
    18. </offer>
    19.  
    20. </offers>
    21. </shop>
    22. </yml_catalog>
    На выходе хотелось бы получить

    PHP:
    1. </offers>
    2. <offer id="150066" available="true">
    3. <currencyId>RUR</currencyId>
    4. <categoryId>подкатегории3</categoryId>
    5. <linkcat>главная кат.</linkcat>
    6. </offer>
    Перечитал документацию раза 4 и закипел.
    Помогите пожалуйста или на правьте на пример для детей где на пальцах раскатывают.
     
    #2 mrprometei, 10 июл 2016
    Последнее редактирование модератором: 10 июл 2016
  3. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Регистрация с 2014 года, а так и не научился оформлять темы, прочитай правила по оформлению тем.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Из этого куска не понятно как offers с category связан, сожми сильно в zip файл и выложи где его легко можно будет скачать и кто-то может поможет с примером.
     
  5. mrprometei

    mrprometei Новичок

    С нами с:
    23 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Прошу прощения я очень редко задаю тут вопросы. =(
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Так обычно для 20-мбайтного файла SimpleXML хватает. А там это не сложно делается
     
  7. mrprometei

    mrprometei Новичок

    С нами с:
    23 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Код (Text):
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!DOCTYPE yml_catalog SYSTEM "shops.dtd">
    3. <yml_catalog date="2016-07-08 04:30">
    4.     <shop>
    5.         <categories>
    6.             <category id="2">категория1</category>
    7.             <category id="1" linksubcat="2">категория2</category>
    8.             <category id="3" linksubcat="2">категория3</category>
    9.         </categories>
    10.         <offers>
    11.             <offer>
    12.                 <categoryId>2</categoryId>
    13.                 <articul>5630FD</articul>
    14.                 <name>test</name>
    15.             </offer>
    16.             <offer>
    17.                 <categoryId>1</categoryId>
    18.                 <articul>5630FD</articul>
    19.                 <name>test</name>
    20.             </offer>
    21.             <offer>
    22.                 <categoryId>3</categoryId>
    23.                 <articul>5630FD</articul>
    24.                 <name>test</name>
    25.             </offer>
    26.         </offers>
    27.  
    28.     </shop>
    29. </yml_catalog>
    сейчас вот сделал аналог файла упрощенный.

    пробую следующим образом

    PHP:
    1. foreach ($xmlstr->xpath('//offer') as $offer) {
    2.  
    3. foreach ($xmlstr->xpath('//category') as $category) {
    4.        
    5.        
    6.        
    7.         if ((string)$offer->categoryId == $category->id)
    8.                 {
    9.                     $offer->categoryId = $category;
    10.                 }
    11.                
    12.     }
    13.  
    14. }
    Но где то ошибаюсь итога желаемого нет.
    <categoryId>1</categoryId> не принимает занчение <categoryId>категория2</categoryId>

    Подскажите где ошибаюсь?