2011-12-07 3 views
7

교체 LibXML :XML :: 나는 그것이 나를 위해 작동하지 않는 몇 가지 이유를 들어 XML 파일</p> <p>의 요소의 "VAL1"값을 대체 할 요소 값을

<testing> 
<application_name>TEST</application_name> 
<application_id>VAL1</application_id> 
<application_password>1234</application_password> 
    </testing> 

my $parser =XML::LibXML->new(); 
$tree =$parser->parse_file($xml); 
$root =$tree->getDocumentElement; 
my ($elem)=$root->findnodes('/testing/application_id'); 
$elem->setValue('VAL2');  

errror 얻을 것입니다 가능한 방법의 목록은 문서를 참조하십시오

답변

7

Node 또는 Element 클래스에는 setValue 방법이 없다 "... XML :: LibXML :: 요소"패키지를 통해 "setValue의"개체 방법을 찾을 수 없습니다 "입니다. 당신을 요소의 자식을 제거하고 새 텍스트 노드 li을 추가 할 수 있습니다. 이 :

$elem->removeChildNodes(); 
$elem->appendText('VAL2'); 
16

어디에서 setValue을 얻었습니까? 아니 XML::LibXML 개체는 이러한 방법이 있습니다.

또한 요소에는 값이 없으므로이를 설정할 수 없습니다.

"VAL1"은 요소의 자식 노드 값 인 text node입니다.

my ($application_id_text) = $root->findnodes('/testing/application_id/text()'); 
$application_id_text->setData('VAL2'); 

불행히도, 그것은 완전히 안전하지 않습니다. 요소에 여러 텍스트 하위 노드가 있으면 어떻게됩니까? 그것이 전혀 없다면 어떨까요?

더 안전한 방법은 요소를 가져 와서 모든 자식 노드를 제거하여 쉽게 수행 할 수있는 텍스트 노드 인 모든 자식 노드를 삭제하고 원하는 값으로 새 텍스트 노드를 추가하는 것입니다.

my ($application_id_node) = $root->findnodes('/testing/application_id'); 
$application_id_node->removeChildNodes(); 
$application_id_node->appendText('VAL2'); 
+0

감사! 그 일 –