Perl XML :: LibXML - 无法替换替换元素值

时间:2014-02-19 13:25:57

标签: perl xml-libxml

XML文件看起来像这样

<?xml version="1.0"?>
<application name="pos">
  <artifact id="example.war" type="war" cycle="ReleaseX-Sprint1">
    <jira>tick-1,tick-2,</jira>
    <jenkins>http://localhost:0000/hudson</jenkins>
    <kportal/>
    <scm>
      <transaction id="111" user="user1">
        <file name="a/b/c/d.txt"/>
        <file name="x/y/z.xml"/>
      </transaction>
    </scm>
  </artifact>
</application>

我想为特定工件节点的kportal节点添加一个值 所以它看起来像<kportal>KPORTAL-1</kportal>

我的代码看起来像这样

my $manifestDoc = $manifestFileParser->parse_file($manifestFile);
my $xpathKportal  = qq(//application[\@name="$applicationName"]/artifact[\@id="$artifactID"]/kportal);
my $newdeploymentNode = $manifestDoc->findnodes($xpathKportal);
$newdeploymentNode->removeChildNodes();
$newdeploymentNode->appendText('KPORTAL-1');

我收到错误

Can't locate object method "removeChildNodes" via package "XML::LibXML::NodeList"

2 个答案:

答案 0 :(得分:1)

XML::LibXML::Node::findnodes在标量上下文中返回NodeList对象,但在列表上下文中返回节点列表。 NodeList没有removeChildNodes方法。建议的解决方案:使用=左侧的列表强制列出上下文。

my ($new_deployment_node) = $manifest_doc->findnodes(...);

答案 1 :(得分:-1)

有两个可能的错误:

你有一个拼写错误:$ newdeploymentNode - &gt; removeChildNodes();

并且您可能没有使用XML :: LibXML中的最新版本,并且在此版本中不支持此方法调用。