[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Добавить новый элемент в xml с помощью DOM
rolik200
Есть xml файл например:
HTML
<?xml version="1.0" encoding="windows-1251" ?>
- <xsl version="2.0">
<root />
<children />
- <zag1 id="1">
<name_z>Книги</name_z>
- <zag2 id="2">
<name_z>Пушкин</name_z>
<name_t num_t="1" price_t="100">Руслан и Людмила</name_t>
<name_t num_t="2" price_t="50">Сказки</name_t>
</zag2>
- <zag2 id="5">
<name_z>Лермонтов</name_z>
<name_t num_t="3" price_t="75">Мцыри</name_t>
<name_t num_t="4" price_t="40">Герой нашего времени</name_t>
</zag2>
</zag1>
- <zag1 id="8">
<name_z>Диски</name_z>
- <zag2 id="9">
<name_z>Кино</name_z>
<name_t num_t="5" price_t="50">Группа крови</name_t>
<name_t num_t="6" price_t="100">Звезда по имени солнце</name_t>
<name_t num_t="7" price_t="110">Начальник комчатки</name_t>
</zag2>
</zag1>
- <zag1 id="13">
<name_z>Пластинки</name_z>
- <zag2 id="14">
<name_z>Абба</name_z>
</zag2>
</zag1>
</xsl>


Хочу добавить новый элемент в узел с id =5
PHP
$doc =DOMDocument::load('ce.xml');
$seach_el=$doc->GetElementById(5);
$new_z1=$doc->createElement('name_t',"Кавказкий пленник");
$seach_el->appendChild($new_z1);
$doc->save('ce.xml');


C парсингом вроде бы разобрался ,а вот с изменением структуры не могу допетрить! Подскажите как правильно? sad.gif



Спустя 7 часов, 34 минуты, 13 секунд (18.07.2009 - 22:14) olgatcpip написал(а):
У меня получилось только так.

PHP
$doc = new DOMDocument();
    $doc->load('test.xml');
    echo "<br>1";
        
    $new_z1
=$doc->createElement('name_t');
    $zags_1 = $doc->getElementsByTagName('zag2');
    foreach($zags_1 as $el){
        echo "<br>~~~The element is: " . $el->tagName ." id=".$el->getAttribute('id'). "\n";
        if($el->getAttribute('id')==5){
        echo "   =>";
            $newnode = $el->appendChild($new_z1);
            $newnode->setAttribute("num_t", "111");
            //$newnode->tagName ="name111";
            // $newnode->setAttribute("name", "name111"); // не дает
            if($newnode) echo '  $newnode true';
            else echo ' $newnode false';
           break;
        }
        $name_t = $el->getElementsByTagName('name_t');
        foreach($name_t as $el2)
        {
            echo "<br>--<br>The element is: " . $el2->tagName ." id=".$el2->getAttribute('num_t'). "\n";
        }
    }

    $doc->save('test.xml');

Спустя 13 часов, 26 минут, 28 секунд (19.07.2009 - 11:41) rolik200 написал(а):
То есть перебираем все элементы пока найдем нужный атрибут и чем больше xml файл тем круче будет цикл. Не легче ли через работу в файле
PHP
function new_tovar($id_r,$n_id,$price_t,$text_t)
    {
    
// добавление товара если известно id zag2
    
$fstr=file_get_contents('ce.xml');
    
$nach_i=strpos($fstr,'<zag2 id="'.$id_r.'">');
    
$max_ch=strlen($fstr);
    
$text_i=substr($fstr,$nach_i,$max_ch);
    
$nach_k=strpos($text_i,'</zag2>');
    
$text_i=substr($text_i,0,$nach_k);
    
$zamena=$text_i."<name_t num_t=\"$n_id\" price_t=\"$price_t\">$text_t</name_t>";
    
$text_f=str_replace($text_i,$zamena,$fstr);
    
$fz=fopen('ce.xml','w');
    
fwrite($fz,$text_f);
    
fclose($fz);
    
// добавление товара если известно id zag2
    
}

Спустя 2 часа, 9 минут, 38 секунд (19.07.2009 - 13:50) olgatcpip написал(а):
да, но у меня с дом элементами не получается более просто работать.
вот тут http://ru.php.net/manual/en/domdocument.getelementbyid.php написан пример, но он почему-то не работает sad.gif

Спустя 56 минут, 29 секунд (19.07.2009 - 14:47) rolik200 написал(а):
Понимаю я с Этим DOM в такой же коме biggrin.gif

Спустя 14 часов, 56 минут, 23 секунды (20.07.2009 - 05:43) olgatcpip написал(а):
Дааа. но мне порой приходится именно домом работать, поэтому я поднаучилась извращаться. А такой задачи как у тебя ещё не было smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.