Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите с заменой данных xml
 
 автор: alex123434   (29.07.2012 в 13:39)   письмо автору
 
 

Добрый ден. Помогите разобраться почему не верно работает пхп скрипт.
<?php
header
("Content-type: text/xml");

$string = <<<XML
<?xml version="1.0"?>
<PAGE>
 <title>first</title>
 <title>second</title>
</PAGE>
XML;

$dom=simplexml_load_string($string);

foreach (
$dom as $PAGE) {
   
$PAGE->title=qweqweqwe;
 }
 
// file_put_contents('test.xml',$dom->asXML());
 
$xmltext1 =  $dom->asXML();
 
echo 
$xmltext1;
?>


в результате получаю следующий результат:

<PAGE>
  <title>
    first
    <title>
      qweqweqwe
    </title>
  </title>
  <title>
    second
    <title>
      qweqweqwe
    </title>
  </title>
</PAGE>


а мне необходимо

<PAGE>
  <title>
    qweqweqwe
  </title>
  <title>
    qweqweqwe
  </title>
</PAGE>

  Ответить  
 
 автор: confirm   (29.07.2012 в 14:59)   письмо автору
 
   для: alex123434   (29.07.2012 в 13:39)
 

Во-первых, руководство гласит:

Конструкция foreach даёт простой способ итерировать по массиву. Но следует помнить, что foreach работает с копией специфицированного массива, а не с самим массивом, следовательно, указатель массива не изменяется, как при работе конструкции each(), и изменения в возвращаемом элементе массива не влияют на массив-оригинал.

  Ответить  
 
 автор: alex123434   (29.07.2012 в 19:05)   письмо автору
 
   для: confirm   (29.07.2012 в 14:59)
 

Что то я each не использовал подскажите как это правильно сделать или ссылку на пример дайте

  Ответить  
 
 автор: confirm   (29.07.2012 в 19:38)   письмо автору
 
   для: alex123434   (29.07.2012 в 19:05)
 

Зачем обязательно each(), примеры которого вы можете найти тут. Вам же нужен вывод, насколько можно судить по коду вашему, значит во время итерации foreach() просто выводите нужное вам, зачем сперва изменить, а потом выводить? Просто нужно использовать такой синтаксис этой конструкции:
foreach(array_expression as $key => $value)
так как вам нужно же еще работать с ключами.

  Ответить  
 
 автор: alex123434   (29.07.2012 в 20:12)   письмо автору
 
   для: confirm   (29.07.2012 в 19:38)
 

Выводить мне не надо мне надо изменить значение в xml (DOM), а уже потом этот преобразованный xml будет и нужен. Если не сложно напишите пример замены текста в title, а то что то совсем запутался

  Ответить  
 
 автор: confirm   (29.07.2012 в 20:31)   письмо автору
 
   для: alex123434   (29.07.2012 в 20:12)
 

Ну так используйте цикл for() или while(), проверяйте ключи вас интересующие, и производите действия необходимые. Видя в примерах руководства конструкцию fareach(), не думайте, что это единственное, чем можно подступиться к элементам.
Прочтите в руководстве о SimpleXMLIterator (кстати, это вам может и пригодиться, если вы хотите менять дерево), там есть примеры в которых for(), думаю, что вникнув, вы поймете почему. Ну и для своего можете применить.

  Ответить  
 
 автор: alex123434   (29.07.2012 в 21:11)   письмо автору
 
   для: confirm   (29.07.2012 в 20:31)
 

Буду разбираться

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования