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