一个节点的XML文件看起来像如下:的Perl的libxml:使用findnodes与属性,达到在xml文件
<?xml version="1.0"?>
<application name="pos">
<artifact id="123" type="war" cycle="Release7-Sprint1">
<jira/>
<jenkins/>
<deployment/>
<scm>
<transaction id="1234" user="">
<file name=""/>
<file name=""/>
</transaction>
</scm>
</artifact>
</application>
我的代码块下面看上去,当我使用属性的硬编码值工作正常(名称),而不是使用变量。我引用线(我的$查询=
'//应用[@名称= “POS”]';)
my $manifestDoc = $manifestFileParser->parse_file($manifestFile);
my $changeLogDoc = $changeLogParser->parse_file($changeLogXml);
my $changeLogRoot = $changeLogDoc->getDocumentElement;
#my $applicationName = pos;
my $query = '//application[@name="pos"]';
my $applicationNode = $manifestDoc->findnodes($query);
my $artifactNode = $manifestDoc->createElement('artifact');
$artifactNode->setAttribute("id",$artifactID);
$artifactNode->setAttribute("type",$artifactType);
$artifactNode->setAttribute("cycle",$releaseCycle);
$applicationNode->[0]->appendChild($artifactNode);
但是如果我修改$查询变量使用一个变量($的applicationName)而不是属性的硬编码值,它给了我一个编译错误下面说:
在updateManifest.pl线无法调用“的appendChild”未定义的值
修改后的代码:
my $applicationName = "pos" ;
my $query = '//application[@name="$applicationName"]';
不知道什么是错的。任何与报价有关的事情? 任何帮助,非常感谢。
非常感谢。我已经使用了选项1,它工作。 – user1470220
XPath也支持单引号。所以我通常会使用''// application [\ @ name ='$ applicationName']“'。 – nwellnhof