2012-08-27 49 views
0

我想从具有特定属性'id'的xml中选择一个元素。 这是我的xml:查找具有属性的元素 - SimpleXML xpath

<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()”

有没有事情错了?

+0

我不知道SimpleXML,所以这不是一个答案。但是,我敢打赌,它的默认行为(与XSLT一致)是返回XPath的字符串值,在本例中为“item 1”。我怀疑还有另一个函数返回NODELIST。 – parsifal

+0

其实它恰恰相反。无论xpath表达式的实际值如何,SimpleXML xpath总是返回'SimpleXMLElement'(一个元素列表)。 –

+3

这是'simplexml_load_file'而不是'simplexml_file_load' – Gordon

回答

11

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

的XPath是不知道“ID”是一个独特的属性,这情况,与xpath将是非唯一的其他属性一样。请尝试:

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

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

相关问题