查找具有属性的元素 - SimpleXML xpath

时间:2012-08-27 16:14:41

标签: php xml xpath simplexml

我正在尝试从我的xml中选择一个具有特定属性“id”的元素。 这是我的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()”

有什么不对吗?

2 个答案:

答案 0 :(得分:12)

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');
}

答案 1 :(得分:0)

在这种情况下,xpath不知道“id”是唯一属性,因为xpath不是唯一的其他属性。尝试:

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

选择数组中第一个返回的子项。