使用perl解析一个特殊的xml文件
我正在尝试解析下面的xml文件,并获取bBranch、Branch使用perl解析一个特殊的xml文件,xml,perl,parsing,Xml,Perl,Parsing,我正在尝试解析下面的xml文件,并获取bBranch、Branch <xml-fragment xmlns:con="http://some web link"> <con:properties> <con:string name="bBranch" value="in" export="never" /> <con:string name="Branch" value="in" export="never" /&g
<xml-fragment xmlns:con="http://some web link">
<con:properties>
<con:string name="bBranch" value="in" export="never" />
<con:string name="Branch" value="in" export="never" />
<con:boolean name="cBranch" value="0" export="never" />
</con:properties>
</xml-fragment>
输出:-
无法在./test2.pl第6行对未定义的值调用方法“getNodeValue”
我是不是错过了什么或者走错了方向
请帮忙。
提前谢谢
:更新:
如果要按如下方式更改xml文件
<xml-fragment xmlns:con="http://some web link">
<con:properties>
<con:string name="Branch" value="Batman" export="never" />
<con:boolean name="cBranch" value="$Branch" export="never" />
</con:properties>
</xml-fragment>
如何获取
cBranch
的值,以便它将获取$Branch
值Batman
?当您要在中使用名称空间时,需要使用:
稍微短一点:
如果要在中使用名称空间,则需要使用: 稍微短一点:
问题是
$entry->getElementsByTagName('con:string')
返回一个数组,因此您需要在已有的数组中插入第二个循环。所以你可以这样做:
foreach my $entry ($doc->getElementsByTagName('con:properties')) {
foreach my $elem ($entry->getElementsByTagName('con:string')) {
my $name = $elem->getAttribute('name');
my $value = $elem->getAttribute('value');
print "$name = $value\n";
}
}
请注意,从xml文档中提取这样的信息非常繁琐,因此您可能需要寻找一种允许您使用xpath访问文档部分的解决方案。另请参见choroba的答案。问题在于
$entry->getElementsByTagName('con:string')
返回一个数组,因此您需要在已有的数组中插入第二个循环。所以你可以这样做:
foreach my $entry ($doc->getElementsByTagName('con:properties')) {
foreach my $elem ($entry->getElementsByTagName('con:string')) {
my $name = $elem->getAttribute('name');
my $value = $elem->getAttribute('value');
print "$name = $value\n";
}
}
请注意,从xml文档中提取这样的信息非常繁琐,因此您可能需要寻找一种允许您使用xpath访问文档部分的解决方案。另请参见choroba的答案。XML::LibXML教程有一页关于XML::LibXML教程有一页关于
open above.xml ;
register-namespace con http://some%20web%20link ;
echo //con:properties/con:string/@name ;
foreach my $entry ($doc->getElementsByTagName('con:properties')) {
foreach my $elem ($entry->getElementsByTagName('con:string')) {
my $name = $elem->getAttribute('name');
my $value = $elem->getAttribute('value');
print "$name = $value\n";
}
}