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

lie*_*ewl 6 php xml dom

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

<list>
    <activity>swimming</activity>
    <activity>running</activity>
<list>
Run Code Online (Sandbox Code Playgroud)

现在,我的想法是创建两个文件:一个索引页面,它显示文件中的内容并提供一个用于插入新元素的字段,以及一个将数据插入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
Run Code Online (Sandbox Code Playgroud)

这是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');
?>
Run Code Online (Sandbox Code Playgroud)

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

Owe*_*wen 8

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

<form name='input' action'insert.php' method='post'> // should be:
<form name="input" action="insert.php" method="post">
Run Code Online (Sandbox Code Playgroud)

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

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

print 'I wrote '.$xmldoc->save('sample.xml').' bytes of data';
Run Code Online (Sandbox Code Playgroud)


小智 5

最终解决方案

样本.XML

<list>
    <activity>swimming</activity>
    <activity>running</activity>
    <activity>Jogging</activity>
    <activity>Theatre</activity>
    <activity>Programming</activity>
</list>
Run Code Online (Sandbox Code Playgroud)

索引.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>
Run Code Online (Sandbox Code Playgroud)

插入.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');
?>
Run Code Online (Sandbox Code Playgroud)