2011-12-07 32 views
7

Tôi muốn thay thế một "VAL1" giá trị của một phần tử trong tập tin xmlXML :: LibXML thay thế giá trị phần tử

Đối với một số lý do nó không làm việc cho tôi:

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

Các errror là có được là "Không thể định vị phương thức đối tượng" setValue "qua gói" XML :: LibXML :: Element ... "

Trả lời

7

Không có phương pháp setValue trong các lớp Node hoặc Element, xem tài liệu để biết danh sách các phương pháp có sẵn. có thể xóa con của phần tử và nối thêm nút văn bản mới li ke this:

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

Bạn nhận được setValue từ đâu? Không có đối tượng XML::LibXML có phương thức như vậy.

Hơn nữa, phần tử không có giá trị, vì vậy bạn chắc chắn không thể đặt giá trị đó.

"VAL1" là giá trị của nút con của phần tử, text node.

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

Thật không may, điều đó không hoàn toàn an toàn. Điều gì xảy ra nếu phần tử có nhiều nút con văn bản? Điều gì sẽ xảy ra nếu nó không có gì cả?

Cách an toàn hơn là lấy phần tử, xóa tất cả các con của nó là các nút văn bản (có thể dễ dàng thực hiện bằng cách xóa tất cả các nút con của nó) và thêm một nút văn bản mới với giá trị mong muốn.

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

Cảm ơn! Làm việc của nó –

Các vấn đề liên quan