【发布时间】:2014-10-26 22:13:43
【问题描述】:
考虑到层次结构,我想提取 XML 的属性值:
<?xml version="1.0" encoding="UTF-8"?>
<database>
<row1s>
<row1 name="fox" category="mammal">
<row2s>
<row2 type="1"/>
<row2 type="2"/>
</row2s>
</row1>
<row1 name="horse" category="mammal">
<row2s>
<row2 type="3"/>
</row2s>
</row1>
<row1 name="bee" category="insect">
<row2s/>
</row1>
<row1 name="wasp" category="insect">
<row2s/>
</row1>
</row1s>
</database>
这是我提取值的 Perl 代码:
use strict;
use DBI;
use XML::XPath;
use XML::XPath::XMLParser;
my $xrow1;
my $xrow2;
my $xp = XML::XPath->new (filename => "animals3.xml");
my $node_list1 = $xp->find ("//row1s/row1");
foreach my $row1 ($node_list1->get_nodelist ()) {
$xrow1 = $row1->getAttribute("name");
print "Level row1 gives: $xrow1\n";
my $node_list2 = $xp->find ("//row2s/row2");
foreach my $row2 ($node_list2->get_nodelist ()) {
$xrow2 = $row2->getAttribute("type");
print "Level row2 gives: $xrow2\n";
}
}
我得到的是:
Level row1 gives: fox
Level row2 gives: 1
Level row2 gives: 2
Level row2 gives: 3
Level row1 gives: horse
Level row2 gives: 1
Level row2 gives: 2
Level row2 gives: 3
Level row1 gives: bee
Level row2 gives: 1
Level row2 gives: 2
Level row2 gives: 3
Level row1 gives: wasp
Level row2 gives: 1
Level row2 gives: 2
Level row2 gives: 3
对于每个级别 1,我从级别 2 获取所有属性值。这不是我想要的。我想只输出通讯员级别 1 的级别 2 条目。但我想要的是:
Level row1 gives: fox
Level row2 gives: 1
Level row2 gives: 2
Level row1 gives: horse
Level row2 gives: 3
Level row1 gives: bee
Level row1 gives: wasp
我将不胜感激任何提示如何解决这个问题。
谢谢。
【问题讨论】:
标签: perl xpath xml-parsing hierarchy