对不起,对不起,但是真的是一个非常简单的任务。我有一个简单的xml结构:
<site>
<page>
<pagename>page1</pagename>
<title>title1</title>
<id>abc
<plot>
this is text
</plot>
</id>
</page>
<page>
<pagename>page2</pagename>
<title>titlee2</title>
<id>xyz
<plot>
this is text
</plot>
</id>
</page>
</site>
我通过ajax post从表单传递3个变量,变量是pagename,id和plot。
我似乎无法做的是编写正确的查询来检查pagename节点与pagename变量,然后检查该页面中的id节点。如果id节点存在,那么我更新绘图节点,如果id不存在,我创建id节点和绘图节点。
我可以编写/更新节点,有人确实帮助找到正确的页面,但后来我迷路了。所以在我上面的例子xml中,如果我传递变量pagename = page1和id = abc,那么我只是更新图,但如果pagename是page1而id = def(不存在),我需要创建id和plot 。如上所述可以执行addChild,更新位,只是无法获得查询权限以检查该页面的id是否存在 - 注意$id = $site->xpath('//id[text()="'.$posted_variable.'"]');
对我不起作用,因为id可能存在于多个页面节点中,但它不能在同一页面节点中重复。
非常感谢您的帮助
答案 0 :(得分:0)
好吧,我有它工作,可能不漂亮,但确实有效 -
$xml = simplexml_load_file('xml.xml');
$site = new SimpleXMLElement($xml->asXML());
$paget = "index";
$text = $_POST['tosave'];
$text = htmlentities($text, ENT_QUOTES, 'UTF-8');
// EDIT / UPDATE //
$pages = $site->xpath('//page/pagename[text()="'.$paget.'"]/..');
if($pages){
$a = array();
foreach( $pages[0]->id as $ID ){
array_push($a,$ID);
}
if(in_array($_POST['containerid'],$a)){
foreach ($a as $key => $value) {
if($value==$_POST['containerid']){
$pages[0]->id[$key]->plot = trim($text) ;
}
}
} else {
$pages[0]->addChild('id',$_POST['containerid'])->addChild('plot',trim($text));
}
}
$site->asXML("xml.xml");
exit;