Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: dom_xml
Форумы портала PHP.SU » PHP » Регулярные выражения » dom_xml

Страниц (1): [1]
 

1. BlackHacker - 12 Октября, 2010 - 17:50:06 - перейти к сообщению
Если делаю не правильно, тыкните носом..

PHP:
скопировать код в буфер обмена
  1. function editcontent($file, $array){
  2.   $xmlstr = join('', file($file));
  3.   if(!$dom = domxml_open_mem($xmlstr))
  4.     exit;
  5.   $root = $dom->document_element();
  6.   $content = $root->child_nodes();
  7.   foreach($content as $news)
  8.   {
  9.     if ($news->tagname == 'news')
  10.     {
  11.       $currentnews = $news->get_attribute('id');
  12.   if ($currentnews == $array["id"] ){
  13.       $news_info = $news->child_nodes();
  14.   foreach ($news_info as $child)
  15.   {
  16.         if ($child->tagname == "link") $child->set_content($array["link"]);
  17.         if ($child->tagname == "rating") $child->set_content($array["rating"]);
  18.         if ($child->tagname == "title") $child->set_content($array["title"]);
  19. }
  20. }
  21. }
  22. }
  23.   $xmlfile = $dom->dump_mem(true);
  24.   $h = fopen($file,"w");
  25.   if (!fwrite($h, $xmlfile))
  26.   {
  27. return('error');
  28.     exit;
  29.   }
  30. };



текст в тегах $child не заменяется, а добавляется.. функцию писал сам, так что возможны ошибки..
2. BlackHacker - 13 Октября, 2010 - 14:24:23 - перейти к сообщению
Не дождавшись ответа, решил проблему сам..

Если кому интересно, в PHP 5 баг с заменой контента в тегах, и он просто добавляется.. Нашел функцию, с помощью которой это решается..

PHP:
скопировать код в буфер обмена
  1. function replace_content( &$node, &$new_content )
  2. {
  3.     $dom =& $node->owner_document();
  4.    
  5.     $newnode =& $dom->create_element( $node->tagname );
  6.  
  7.     $newnode->set_content( $new_content );
  8.    
  9.     $atts =& $node->attributes();
  10.     $node->replace_node( $newnode );
  11. };


P.S. Тему можно закрыть
3. JustUserR - 15 Октября, 2010 - 11:58:45 - перейти к сообщению
BlackHacker пишет:
Если кому интересно, в PHP 5 баг с заменой контента в тегах, и он просто добавляется.. Нашел функцию, с помощью которой это решается
Фактически в интерпретаторе PHP версии 5 все сложные информационные объекты представлены в виде ссылок в локальном контексте и таким образом создание явных символических ссылок на них не является необходимым - в то же время при переопределении операций get и set возможно добавление непосредственного обращения к clone-функции - таким образом для решения указанного вами вопроса скорее всего возможно использовать переопределение get/set-функций в оригинальном классе

 

Powered by ExBB FM 1.0 RC1