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 ポストで 3 つの変数を渡します。変数は pagename、id、および plot です。

私ができないように見えるのは、ページ名ノードをページ名変数に対してチェックし、そのページの id ノードをチェックする正しいクエリを書くことです。ID ノードが存在する場合はプロット ノードを更新し、ID ノードが存在しない場合は ID ノードとプロット ノードを作成します。

ノードを作成/更新できます。誰かが適切なページを見つけるのを手伝ってくれましたが、迷子になります。したがって、上記の xml の例では、変数 pagename=page1 および id=abc を渡すと、プロットを更新するだけですが、pagename が page1 で id=def (存在しない) の場合、id とプロットを作成する必要があります。 . 前述のように、addChild、更新ビットを実行できますが、そのページのIDが存在することを確認するためのクエリを取得できません-IDが$id = $site->xpath('//id[text()="'.$posted_variable.'"]');複数のページノードに存在する可能性があるため、注意してください。同じページ ノードに複製されます。

助けてくれてありがとう

4

1 に答える 1

0

OK、動作しています。きれいではないかもしれませんが、動作します -

$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 に答える