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

Форум PHP

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

 

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

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

тема: Редактирование xml файла с помощью SimpleXML
 
 автор: Adj   (20.12.2009 в 19:43)   письмо автору
 
 

Всем привет.

Имется директория для загрузки изображений. Список с описанием изображений храниться в файле catalog.xml в той же папке. Вот его структура:
<?xml version="1.0" encoding="utf-8" ?>
<catalog count="N" view="yes">
  <description>Основной каталог</description>
  <image id="lwipgh" date="1261151756" view="yes" fname="image1.jpg">
    <name>Заголовок изображения 1</name>
    <description />
  </image>
  <image id="zhtpwe" date="1261151757" view="yes" fname="image2.jpg">
    <name>Заголовок изображения 2</name>
    <description />
  </image>
  ...
</catalog>

Пытаюсь с помощью SimpleXML отредактировать файл, но не удается:
$xml = simplexml_load_file('catalog.xml');
// С помощью метода xpath нахожу необходимый узел
$image_by_id = $xml->xpath('//image[@id="'.$img_id.'"]');
// Редактирую
// Ф-я utf8encode() преобразует кодировку в UTF-8
$image_by_id->name = utf8encode($img_new_name);
// Сохраняю
$xml->asXML('catalog.xml');

Но в итоге ничего не изменяеться. Где тут может быть ошибка?
Возможно ли отредактировать узлы, выбранные с помощью xpath?

  Ответить  
 
 автор: Саня   (20.12.2009 в 20:14)   письмо автору
 
   для: Adj   (20.12.2009 в 19:43)
 

1. Функции utf8encode() в РНР нет.
2. Метод xpath() возвращает массив объектов.

  Ответить  
 
 автор: Adj   (20.12.2009 в 21:08)   письмо автору
 
   для: Саня   (20.12.2009 в 20:14)
 

>1. Функции utf8encode() в РНР нет.
Это пользовательская ф-я, поэтому я ее прокомментровал.

>2. Метод xpath() возвращает массив объектов.
Если я правильно понял, полученный массив уже никак не связан с $xml и его редактирование не изменит исходный xml-файл?

  Ответить  
 
 автор: Саня   (20.12.2009 в 21:20)   письмо автору
 
   для: Adj   (20.12.2009 в 21:08)
 

Изменит. Массив объектов же. Я бы даже сказал массив ссылок на объекты.

  Ответить  
 
 автор: Adj   (20.12.2009 в 23:50)   письмо автору
 
   для: Саня   (20.12.2009 в 21:20)
 

А разве вот эта запись не меняет значение:
$image_by_id->name = utf8encode($img_new_name); 

и вот эта не сохраняет полученный массив:
$xml->asXML('catalog.xml');

?

  Ответить  
 
 автор: Саня   (20.12.2009 в 23:53)   письмо автору
 
   для: Adj   (20.12.2009 в 23:50)
 

$image_by_id->name = utf8encode($img_new_name);
Я не вижу тут обращение к элементу массива. И вообще, включите отображение ошибок.

  Ответить  
 
 автор: Adj   (20.12.2009 в 23:56)   письмо автору
 
   для: Саня   (20.12.2009 в 23:53)
 

$image_by_id['name'] = utf8encode($img_new_name) так :)?

  Ответить  
 
 автор: Саня   (20.12.2009 в 23:57)   письмо автору
 
   для: Adj   (20.12.2009 в 23:56)
 

$image_by_id[0]->name = utf8encode($img_new_name);

Xpath находит все элементы по указанной маске и возвращает их в виде массива. У вас получился массив с одним элементом.

  Ответить  
 
 автор: Adj   (21.12.2009 в 00:09)   письмо автору
 
   для: Саня   (20.12.2009 в 23:57)
 

Ну вот, теперь работает. Надо было еще немного пошевелить мозгами.
ОГРОМНОЕ Вам человеческое спасибо!!!

  Ответить  
 
 автор: Саня   (20.12.2009 в 23:57)   письмо автору
 
   для: Adj   (20.12.2009 в 23:56)
 

.

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

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