2012-08-27 48 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'); ?> 

選擇數組中的第一個返回的子項。

相關問題