1

これは非常に簡単ですが、いつものように完全に厚く、SimpleXMLは初めてです。

私がやりたいのは、特定の値に基づいて特定のメモを追加または編集することだけです。xmlファイルの例:

<site>
    <page>
     <pagename>index</pagename>
      <title>PHP: Behind the Parser</title>
      <id>abc
      <plot>
       So, this language. It's like, a programming language. Or is it a
       scripting language? All is revealed in this thrilling horror spoof
       of a documentary.
      </plot>
      </id>
      <id>def
      <plot>
      2345234 So, this language. It's like, a programming language. Or is it a
       scripting language? All is revealed in this thrilling horror spoof
       of a documentary.
      </plot>
      </id>
    </page>

     <page>
      <pagename>testit</pagename>
      <title>node2</title>
      <id>345
      <plot>
       345234 So, this language. It's like, a programming language. Or is it a
       scripting language? All is revealed in this thrilling horror spoof
       of a documentary.
      </plot>
      </id>
    </page>
    </site>

とを追加してインデックスを作成する場合、ノードキーを見つけるにはどうすればよいですか?

コンテンツを追加できます。

$itemsNode = $site->page->pagename;

$itemsNode->addChild("id", '12121')->addChild('plot', 'John Doe');

しかし、私がしたい/する必要があるのは、pagename ='index'またはpagename='testit'にコンテンツを追加することです(たとえば)indexがkey [0]で、testitがkey[1]であるということを取得する方法がわかりません。スイッチなどを備えた何らかの形式のforeachループ。それを行う簡単な方法が必要ですか?いいえ?

だから、私が思うように見えるはずです(しかし、そうでなければ機能しませんが、質問をすることはできません)

$paget = 'index' //(or testit')
if( (string) $site->page->pagename == $paget ){

$itemsNode = $site->page;

$itemsNode->addChild("id", '12121')->addChild('plot', 'John Doe');

}
4

2 に答える 2

2

xpathを使用して、変更するノードにアクセスできます。

$xml_string = '<site>...'; // your original input
$xml = simplexml_load_string($xml_string);
$pages = $xml->xpath('//page/pagename[text()="index"]/..')
if ($nodes) {
    // at least one node found, you can use it as before
    $pages[0]->addChild('id', '12121');
}

パターンは基本的に、のコンテンツが存在するすべて<pagename>のアンダーを検索し、ノードを返すために1つステップアップします。<page><pagename>index<page>

于 2012-08-20T15:21:16.920 に答える
1

編集:

ノードの正確な位置がわかっている場合は、次のように実行できます。

$site->page[0]->addChild("id", '12121');
$site->page[0]->addChild('plot', 'John Doe');

この場合、page [0]は「index」になり、page[1]は「testit」になります。

それ以外の場合は、目的のノードが見つかるまでページノード間をループする必要があります。以下のコードは、その方法を示しています。

$paget = "index";
foreach( $site->page as $page ) {
   if( $page->pagename == $paget ) {
     // Found the node
     // Play with $page as you like...
     $page->addChild("id", '12121');
     $page->addChild('plot', 'John Doe');
     break;
   }
}
于 2012-08-20T15:16:52.493 に答える