PHP DOM ile XML dosyasına veri ekleme

5 Cevap php

Varolan bir XML dosyasına yeni veri eklemek için çalışıyordu, ama işe yaramıyor. İşte benim xml dosyasıdır:

<list>
    <activity>swimming</activity>
    <activity>running</activity>
<list>

Bu dosyada ne görüntüler ve yeni unsurlar eklemek için bir alan sağlayan bir indeks sayfası, ve XML dosyasına veri eklemek bir php sayfa: Şimdi benim fikrim iki dosya yapıyordu. İşte index.php için kod:

<html>
<head><title>test</title></head>
</head>

<?php
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml', LIBXML_NOBLANKS);

    $activities = = $xmldoc->firstChild->firstChild;
    if($activities!=null){
        while(activities!=null){
            echo $activities->textContent.'<br/>';
            activities = activities->nextSibling.
        }
    }
?>

<form name='input' action='insert.php' method='post'>
    insert activity:
    <input type='text' name='activity'/>
    <input type='submit' value='send'/>
</form>
</body>
</html

ve burada insert.php için kod:

<?php
    header('Location:index.php');
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml');

    $newAct = $_POST['activity'];

    $root = $xmldoc->firstChild;

    $newElement = $xmldoc->createElement('activity');
    $root->appendChild($newElement);
    $newText = $xmldoc->createTextNode($newAct);
    $newElement->appendChild($newText);

    $xmldoc->save('sample.xml');
?>

Kullanıcı, XML dosyasında bulunan mevcut faaliyetlerin bir listesini görmek istiyorsunuz index.php, ve o yeni aktiviteler ekleyebilirsiniz nerede altına bir metin alanına erişmek için olduğunu. Gönder butonuna tıkladıktan sonra, sayfa, bir DOM ağacındaki XML dosyasını açar kök düğümü altında yeni bir düğüm ekler ve kullanıcı olması gereken yerde, index.php sayfasına geri çağıran bir kod içeren, insert.php dediğimiz başkalarının kapsamındaki faaliyetlerin listesini, orada onun yeni etkinliği görmek mümkün. Bu çalışmıyor. I yeni bir girdi, sayfaları ferahlatır göndermek için butona tıklayın ve görünüşte hiçbir şey olmuyor, XML önce olduğu gibi aynıdır. Ben yanlış ne yaptı? Ayrıca, bunu yapmanın daha iyi bir yolu olup olmadığını bilmek istiyorum.

5 Cevap

kod bloğu kopyalama ve mevcut dosya yapıştırılan nedir? eğer öyleyse ben iki olası sorunları görmek:

<form name='input' action'insert.php' method='post'> // should be:
<form name="input" action="insert.php" method="post">

not: action = "insert.php" eksik, formu sadece tarif davranıştır göndererek olmadan kendini yeniden neden olur hangi.

ikincisi, size "örnek.xml" yazma iznine sahip olduğundan emin olun. Eğer gerçekten bir şey yazıyoruz eğer teyit edebilirsiniz:

print 'I wrote '.$xmldoc->save('sample.xml').' bytes of data';

Nihai Çözüm

sample.XML

<list>
    <activity>swimming</activity>
    <activity>running</activity>
    <activity>Jogging</activity>
    <activity>Theatre</activity>
    <activity>Programming</activity>
</list>

index.php

<html>
<head><title>test</title></head>
</head>

<?php
    $xmldoc = new DOMDocument();
    $xmldoc->load("sample.xml", LIBXML_NOBLANKS);

    $activities = $xmldoc->firstChild->firstChild;
    if($activities!=null){
        while($activities!=null){
            echo $activities->textContent."<br/>";
            $activities = $activities->nextSibling;
        }
    }
?>

<form name="input" action="insert.php" method="post">
    insert activity:
    <input type="text" name="activity"/>
    <input type="submit" value="send"/>
</form>
</body>
</html>

insert.php

<?php
    header('Location:index.php');
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml');

    $newAct = $_POST['activity'];

    $root = $xmldoc->firstChild;

    $newElement = $xmldoc->createElement('activity');
    $root->appendChild($newElement);
    $newText = $xmldoc->createTextNode($newAct);
    $newElement->appendChild($newText);

    $xmldoc->save('sample.xml');
?>

$ NewText = $ xmldoc-> createTextNode ($ newActv);

Bu satırı değiştirin

$ NewText = $ xmldoc-> createTextNode ($ newAct);

Aslında iki yerde hatalar yaptı.

This line should be I think because of the typo, you missed an equal sign. Also

These lines should be

Try now, it should work, Hop this would make some sense

Bu i benim için işe kodudur.

index.php

<html>
<head><title>test</title></head>
</head>

<?php
    $xmldoc = new DOMDocument();
    $xmldoc->load('örnek.xml', LIBXML_NOBLANKS);

    $activities = $xmldoc->firstChild->firstChild;
    if($activities!=null){
        while($activities!=null){
            echo $activities->textContent.'<br/>';
            $activities = $activities->nextSibling;
        }
    }
?>

<form name='input' action='insert.php' method='post'>
    insert activity:
    <input type='text' name='activity'/>
    <input type='submit' value='send'/>
</form>
</body>
</html>




insert.php


<?php
    header('Location:index.php');
    $xmldoc = new DOMDocument();
    $xmldoc->load('örnek.xml');

    $newAct = $_POST['activity'];

    $root = $xmldoc->firstChild;

    $newElement = $xmldoc->createElement('activity');
    $root->appendChild($newElement);
    $newText = $xmldoc->createTextNode($newAct);
    $newElement->appendChild($newText);

    $xmldoc->save('örnek.xml');
?>

örnek.xml

<list>
  <activity>swimming</activity> 
  <activity>running</activity> 
</list>