Php 如果是类型查询,则将节点更新或添加到simplexml

Php 如果是类型查询,则将节点更新或添加到simplexml,php,if-statement,simplexml,Php,If Statement,Simplexml,好吧,很抱歉,但让内裤扭转是一项非常简单的任务。我有一个简单的xml结构: <site> <page> <pagename>page1</pagename> <title>title1</title> <id>abc <plot> this is text </plot> </id> </page> <page>

好吧,很抱歉,但让内裤扭转是一项非常简单的任务。我有一个简单的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>

第1页
标题1
abc
这是文本
第2页
标题2
xyz
这是文本
我通过ajax post从一个表单中传递了3个变量,这些变量是pagename、id和plot

我似乎无法编写正确的查询,根据pagename变量检查pagename节点,然后检查该页面中的id节点。如果id节点存在,则更新绘图节点;如果id不存在,则创建id节点和绘图节点

我可以写/更新节点,有人确实帮我找到了正确的页面,但后来我迷路了。因此,在上面的示例xml中,如果我传递变量pagename=page1和id=abc,那么我只更新绘图,但是如果pagename是page1和id=def(不存在),我需要创建id和绘图。如前所述,可以执行addChild、update位,但无法正确地获取查询以检查该页面的id是否存在-注意
$id=$site->xpath(“//id[text()=”.$posted_variable.”“])不适用于我,因为该id可能存在于多个页面节点中,但不能在同一页面节点中重复


非常感谢您的帮助

好的,我已经让它工作了,可能不漂亮,但它确实工作了-

$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;