6

我试图将新数据插入现有的 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 与以前相同。我做错什么了?另外,我想知道是否有更好的方法。

4

6 回答 6

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';
于 2008-10-11T21:01:06.737 回答
5

最终解决方案

样本.XML

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

索引.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>

插入.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');
?>
于 2009-12-27T03:25:39.167 回答
2

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

将此行更改为

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

于 2008-10-29T13:34:38.120 回答
2

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

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

这些行应该是

立即尝试,它应该可以工作,Hop 这会有些道理

于 2008-11-02T08:25:52.620 回答
1

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

<?xml:stylesheet type="text/xsl" href="sample.xsl" ?>
于 2009-03-24T02:57:31.063 回答
1

这是我为我工作的代码。

索引.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');
?>

示例.xml

<list>
  <activity>swimming</activity> 
  <activity>running</activity> 
</list>
于 2009-10-18T17:05:12.550 回答