您好我正在尝试使用XML :: LibXML在xdm文件中找到一些节点,我需要一些帮助。这是xdm
的一部分<d:ctr name="Cpl">
<d:var name="ModuleId" value="Cpl_TS_TxDxM3I0R0_"/>
<d:var name="Enabled" value="TRUE"/>
<d:var name="Generate" value="TRUE"/>
<d:var name="Load" value="TRUE"/>
<d:var name="Soft" value="3.0.2 B104427"/>
<d:var name="URL" value="config\Cpl.xdm"/>
<d:var name="Form" value="xdm"/>
<d:var name="PreConfig" >
<a:a name="IMPO" value="@DEF"/>
</d:var>
<d:var name="RecConfig" >
<a:a name="IMPO" value="@DEF"/>
</d:var>
</d:ctr>
<d:ctr name="CplShared">
<d:var name="ModuleId" value="_TS_"/>
<d:var name="Enabled" value="TRUE"/>
<d:var name="Generate" value="TRUE"/>
<d:var name="Load" value="TRUE"/>
<d:var name="Soft" value="3.0.2 B104427"/>
<d:var name="URL"
value="..\..\Common\config\CplShared.xdm"/>
<d:var name="Form" value="xdm"/>
<d:var name="PreConfig" >
<a:a name="IMPO" value="@DEF"/>
</d:var>
<d:var name="RecConfig" >
<a:a name="IMPO" value="@DEF"/>
</d:var>
我想从moduleId节点中提取值。 findnodes似乎不起作用
foreach my $nodeArPackage ($xml_file->findnodes('//d:var'))
{
my $nameNodeFramePackage = $nodeArPackage->findnodes(name="ModuleId");
print $nameNodeFramePackage;
}
答案 0 :(得分:1)
你的问题就在这一行:
my $nameNodeFramePackage = $nodeArPackage->findnodes(name="ModuleId");
这无效 - 如果您在strict
和warnings
下运行代码,则会发生错误。 (无论如何你应该这样做 - 这是非常好的做法)。
Bareword "name" not allowed at line ...
即使它不是,它仍然无法作为xpath
表达式有效。看一下XML::Twig quick reference - 那里有关于xpath
表达式的部分。
你可能想要的是:
my $nameNodeFramePackage = $nodeArPackage->findnodes('[@name="ModuleId"]');
虽然没有任何理由你不能将两者结合起来:
foreach my $nameNodeFramePackage ($xml_file->findnodes('//d:var[@name="ModuleId"]')) {
print $nameNodeFramePackage;
}
(注意:XML::LibXML
没有安装在我的Windows机器上,所以我还没有使用它来测试xpath。它适用于使用类似语法的XML::Twig
< / p>