0

特定の属性「id」を持つ要素をxmlから選択しようとしています。これは私のxmlです:

<listitems>
  <item id="1">
    <name>item 1</name>
  </item>
  <item id="2">
    <name>item 2</name>
  </item>
  <item id="3">
    <name>item 3</name>
  </item>
</listitems>

これはphpファイルです:

<?php
$simplexml = simplexml_file_load('test.xml');
$item = $simplexml->xpath('item[@id="1"]');
?>

次に、たとえば、試してみると:

<?php $item->addchild('description','textdescription'); ?>

最後の行にこのエラーが表示されます:「致命的なエラー:非オブジェクトでのメンバー関数addchild()の呼び出し」

何か問題でもありますか?

4

2 に答える 2

13

SimpleXMLのxpath()は、idで指定した場合でも、常に要素の配列を返します。それに何かを追加するには、その配列から特定の要素を抽出する必要があります。

これを試して:

$items = $simplexml->xpath('item[@id="1"]');
$item = $items[0];
$item->addchild('description','textdescription');

または、さらに良いことに、そのIDを持つものが実際に見つかったことを確認します。

$items = $simplexml->xpath('item[@id="1"]');
if (count($items) == 1)
{
    $item = $items[0];
    $item->addchild('description','textdescription');
}
于 2012-08-27T16:18:03.563 に答える
0

この場合、xpathは、「id」が一意の属性であることを認識しません。他の属性と同様に、xpathは一意ではありません。試す:

<?php $item[0]->addchild('description','textdescription'); ?>

配列内で最初に返された子を選択します。

于 2012-08-27T16:18:41.597 に答える