0

好的,对此感到抱歉,但是让短裤与真正非常简单的任务发生冲突。我有一个简单的 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 节点存在,那么我更新 plot 节点,如果 id 不存在,我创建 id 节点和 plot 节点。

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

非常感谢您的帮助

4

1 回答 1

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;
于 2012-08-22T10:51:09.423 回答