使用PHP DOM在XML文件中插入数据

时间:2008-10-11 20:24:40

标签: php xml dom

我试图将新数据插入到现有的XML文件中,但它无法正常工作。这是我的xml文件:

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

现在,我的想法是创建两个文件:一个索引页面,它显示文件上的内容并提供一个用于插入新元素的字段,以及一个将数据插入XML文件的php页面。这是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');
?>

用户将访问index.php,在那里他将看到XML文件中存在的当前活动的列表,以及下面可以插入新活动的文本字段。单击发送按钮后,页面将调用insert.php,其中包含在DOM树中打开XML文件的代码,在根节点下插入新节点并回调index.php页面,用户应该在能够看到活动清单,他在其他活动下的新活动。它不起作用。当我点击按钮提交新条目时,页面刷新,显然没有任何反应,XML与以前相同。我做错了什么?此外,我想知道是否有更好的方法。

6 个答案:

答案 0 :(得分:8)

是您的代码块复制并从现有文件中粘贴?如果是这样,我会看到两个潜在的问题:

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

注意:您遗漏了action = "insert.php",这会导致表单只是在不提交的情况下重新加载,这就是您描述的行为。

其次,确保您具有“sample.xml”的写权限。你可以确认你是否真的在写任何东西:

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

答案 1 :(得分:3)

最终解决方案

<强> 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');
?>

答案 2 :(得分:2)

$ newText = $ xmldoc-&gt; createTextNode($ newActv);

将此行更改为

$ newText = $ xmldoc-&gt; createTextNode($ newAct);

答案 3 :(得分:2)

实际上你在两个地方犯了错误。

这条线应该是  我想因为错字,你错过了一个等号。还

这些行应该是

现在试试,它应该有用, 跳这个会有所帮助

答案 4 :(得分:1)

我想我知道你的代码有什么问题。你不应该这样写:<?xml-stylesheet type="text/xsl" href="sample.xsl" ?> 正确的代码是:

<?xml:stylesheet type="text/xsl" href="sample.xsl" ?>

答案 5 :(得分:1)

这是我为我工作的代码。

的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');
?>

sample.xml中

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