2012-08-27 3 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의 문자열 값 (이 경우 "항목 1")을 반환하는 것입니다. NODELIST를 반환하는 또 다른 기능이 있다고 의심됩니다. – parsifal

+0

사실 그것은 반대입니다. SimpleXML xpath는 xpath 표현식의 실제 값에 상관없이 항상 'SimpleXMLElement' (요소 목록)를 반환합니다. –

+3

그것은'의'(http://stackoverflow.com/search?q=call+to+a+member+function+of+ [비 객체의 멤버 함수를 호출]의 – 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'); ?> 

배열에서 첫 번째로 반환 된 하위를 선택하십시오.