我有这个PHP代码,它将一组节点添加到XML文件中。它完成了它应该做的大部分工作,它找到了添加的位置,但它没有进行更新。
我有一个这种结构的xml文件。
<COMMUNITIES>
<COMMUNITY ID="c001">
<URLS>
<URL ID="u001">
<NAME>Google.com</NAME>
<URL>http://www.google.com</URL>
</URL>
</URLS>
</COMMUNITY>
</COMMUNITIES>
正在对URLS节点进行更新。用户单击“添加URL”链接,我将新URL添加到此节点。
<URL ID="u002">
<NAME>Yahoo.com</NAME>
<URL>http://www.yahoo.com</URL>
</URL>
如果URLS节点存在,我追加新的url节点。如果URLS节点不存在,我创建它,然后追加新的url节点。
没有错误,一切似乎都有效,但URLS节点为空。这是PHP脚本。
function add_url( $nodeid, $urlid, $urlname, $urllink ) {
$dom = new DOMDocument();
$dom->load('communities.xml');
$dom->formatOutput = true;
$dom->preserveWhiteSpace = false;
// get document element
$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//COMMUNITY[@ID='$nodeid']");
if ($nodes->length) {
$node = $nodes->item(0);
$xurl = $dom->createElement("URL");
$xurl->setAttribute("ID", $urlid);
$xuname = $dom->createElement("NAME");
$xunameText = $dom->createTextNode(mysql_escape_mimic($urlname));
$xuname->appendChild($xunameText);
$xulink = $dom->createElement("URL");
$xulinkText = $dom->createTextNode(mysql_escape_mimic($urllink));
$xulink->appendChild($xulinkText);
$xurl->appendChild($xuname);
$xurl->appendChild($xulink);
$xurls = $xpath->query("//COMMUNITY[@ID='$nodeid']/URLS");
if ($xurls->length) {
}
else {
$xurls = $dom->createElement("URLS");
}
$xurls->appendChild($xurl);
/* $node->appendChild($xurls); */
}
$dom->save('communities.xml');
}
我认为问题在于我在已经存在的情况下附加了URLS节点。但我评论说这句话。我确信问题很简单,但我是新手。我在网站上查看并没有找到具体情况。
修改
在if ($xurls->length)
之前删除了return语句。
固定功能。
答案 0 :(得分:1)
在实际保存更改之前,你正在调用return
函数的一半 - 所以我猜想发生的事情是你在内存中进行修改,但实际上并没有将它们写入文件...
答案 1 :(得分:0)
问题是我试图将节点添加到已经在XML文件中的节点为空。
而不是具有这样数据的节点。
<URLS>
<URL ID="u001">
<NAME>Google.com</NAME>
</URL>
</URLS>
我有一个这样的节点。
<URLS/>
常识说这应该不是问题。如果节点为空,则appendChild应该只添加数据并将节点重写为。
<URLS>
<URL ID="u002">
<NAME>Yahoo.com</NAME>
</URL>
</URLS>
这是有效的PHP脚本。您会注意到我创建了一个新节点,而不是附加到<URLS/>
。我还重新排序了appendChild,从顶部节点开始,而不是先创建子节点,然后将一组节点附加到顶部节点。
function add_url( $nodeid, $urlid, $urlname, $urllink ) {
$dom = new DOMDocument();
$dom->load('communities.xml');
$dom->formatOutput = true;
$dom->preserveWhiteSpace = true;
// get document element
$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//COMMUNITY[@ID='$nodeid']");
if ($nodes->length) {
$node = $nodes->item(0);
$xurls = $xpath->query("//COMMUNITY[@ID='$nodeid']/URLS");
if ($xurls->length) {
}
else {
$xurls = $dom->createElement("URLS");
$node->appendChild($xurls);
}
$xurls = $dom->createElement("URLSC");
$node->appendChild($xurls);
$xurl = $dom->createElement("URL");
$xurl->setAttribute("ID", $urlid);
$xurls->appendChild($xurl);
$xuname = $dom->createElement("NAME");
$xunameText = $dom->createTextNode(mysql_escape_mimic($urlname));
$xuname->appendChild($xunameText);
$xurl->appendChild($xuname);
$xulink = $dom->createElement("URLC");
$xulinkText = $dom->createTextNode(mysql_escape_mimic($urllink));
$xulink->appendChild($xulinkText);
$xurl->appendChild($xulink);
}
$dom->save('communities.xml');
}
所以我必须修改创建空节点<URLS/>
的函数。我不应该在该函数中创建节点,而是仅在add_url函数不存在的情况下在此处创建它。