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 :: Версия для печати :: Изменить в XML один узел
Форумы портала PHP.SU » » XML и его обработка » Изменить в XML один узел

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

1. lukamal - 16 Января, 2012 - 18:49:45 - перейти к сообщению
нарыл вот такой скрипт
PHP:
скопировать код в буфер обмена
  1. $xml = simplexml_load_string($xmlstr);
  2. $xml->movie[0]->characters->character[0]->name = 'Miss Coder';
  3. echo $xml->asXML();


пример простой и понятен

вопрос вот в чём.
имеется XML файл с описанием книг например:

CODE (html):
скопировать код в буфер обмена
  1.  
  2. books.xml
  3. <xml>
  4. <books>
  5.             <book id="1">
  6.                      <nazvanie>Книга1</nazvanie>
  7.                       <cena>100</cena>
  8.              </book>
  9.             <book id="2">
  10.                      <nazvanie>Книга2</nazvanie>
  11.                       <cena>102</cena>
  12.              </book>
  13.             <book id="3">
  14.                      <nazvanie>Книга3</nazvanie>
  15.                       <cena>103</cena>
  16.              </book>
  17.             <book id="4">
  18.                      <nazvanie>Книга4</nazvanie>
  19.                       <cena>104</cena>
  20.              </book>
  21.             <book id="5">
  22.                      <nazvanie>Книга5</nazvanie>
  23.                       <cena>105</cena>
  24.              </book>
  25.             <book id="n">
  26.                      <nazvanie>Книгаn</nazvanie>
  27.                       <cena>10n</cena>
  28.              </book>
  29.  
  30. </books>
  31. </xml>
  32.  


читаем файл
$xml = simplexml_load_file("books.xml");
попадаем на нужный узел
$xmlbook = $xml->XPath("books/book[@id=\"5\"]");
меняем меняем информацию
$xmlbook->cena = 200;
$xmlbook->asXML("books.xml");
но как потом это записать обратно в файл не приходит в голову.
вся ветка book превращается в строку 200 весь узел прподает.
нужно изменять по полному пути как это описано в примере только тогда получается
как найти полный путь необходимого узла???
яша гоша не помогли! может не правильно спрашивал!
2. lukamal - 18 Января, 2012 - 01:59:48 - перейти к сообщению
http://www.php.su/Ни чего в голову кроме как прогонять весь books в цикле и искать нужный id не приходит.

$xml->book['$i']->cena = "222";
$xml->asXML("books.xml");


Тема закрыта!

" target="_blank">Ни чего в голову кроме как прогонять весь books в цикле и искать нужный id не приходит.

$xml->book['$i']->cena = "222";
$xml->asXML("books.xml");


Тема закрыта!

3. caballero - 18 Января, 2012 - 02:14:16 - перейти к сообщению
для поиска вообще то есть XPath
а для изменения нужно не simplexml использовать а DOM

 

Powered by ExBB FM 1.0 RC1