有人能帮帮我吗?我需要用XML::LibXML模块替换使用Perl的XML节点。
这是XML文件的片段:
<utenti>
<utente>
<username>amministratore</username>
<useremail>admin@email.com</useremail>
<password>0000</password>
</utente>
</utenti>我需要替换密码的值。
特别是,我必须在XML文件中找到具有特定用户名(由cookie $userCookie提供)的用户,并将其密码替换为变量$newPSW。
我试过这个:
my $psw = $doc->findnodes("/utenti/utente[username=\"$userCookie\"]/password");
my $parent = $psw->parentNode;
$parent->removeChild($psw);
my $password = XML::LibXML::Element->new('password');
$password->appendText( $newPSW );
$parent->appendChild($password);但是,每次浏览器给出以下错误:
Can't locate object method "parentNode" via package "XML::LibXML::NodeList"似乎找不到我用的任何方法。
有人能帮忙吗?
发布于 2015-05-19 09:14:22
结果是得到了一个XML::LibXML::NodeList。并且这个对象没有函数parentNode。您必须获得数组的第一个元素,然后调用它上的方法parentNode。
第一个对象将是类XML::LibXML::Node的对象,它有一个函数parentNode。
有关详细信息,请参阅XML::LibXML::Node文档
my $psw = $doc->findnodes("/utenti/utente[username=\"$userCookie\"]/password");
my $parent = $psw->[0]->parentNode;
$parent->removeChild($psw->[0]);发布于 2015-05-19 09:36:07
问题是$psw是一个XML::LibXML::NodeList对象,而不仅仅是一个节点--尽管它应该是一个节点的列表。
这里最简单的解决方案是使用列表赋值来获取列表中的第一个元素--希望是唯一的元素。
如果嵌入了双引号,则更改字符串分隔符也更整洁
像这样
my ($psw) = $doc->findnodes(qq</utenti/utente[username="$userCookie"]/password>);发布于 2015-05-19 09:40:23
XML::XSH2是XML::LibXML的包装器,它可以使您的生活更轻松:
set /utenti/utente[username="amministratore"]/password $newPSW ;https://stackoverflow.com/questions/30321246
复制相似问题