我有像这样的XMl文件
<orderinfo>
<data>
<Id>raj</Id>
<Customer>bvr</Customer>
<Suppliers>
<Supplier Id="svr" />
<Supplier Id="dvr" />
<Supplier Id="klr" />
</Suppliers>
</data>
<data>
<Id>svr</Id>
<Customer>raj</Customer>
<Suppliers>
<Supplier Id="avr" />
<Supplier Id="csr" />
<Supplier Id="ksr" />
</Suppliers>
</data>
<data>
<Id>avr</Id>
<Customer>svr</Customer>
<Suppliers>
<Supplier Id="Bpv" />
<Supplier Id="Wrr" />
<Supplier Id="Sdr" />
</Suppliers>
</data>
<data>
<Id>csr</Id>
<Customer>svr</Customer>
<Suppliers>
<Supplier Id="bvs" />
<Supplier Id="vvs" />
<Supplier Id="Ssv" />
</Suppliers>
</data>
<data>
<Id>klr</Id>
<Customer>PUMC</Customer>
<Suppliers>
<Supplier Id="ssn" />
<Supplier Id="qis" />
<Supplier Id="nan" />
</Suppliers>
</data>
</orderinfo>
以上xml代表供应商客户关系。我需要搜索客户标签数据不等于任何数据节点的Id标签,然后该客户是最高客户。 如果我们找到顶级客户,则打印该节点Id,然后打印该节点供应商ID。根据此节点的每个供应商ID,我需要匹配此供应商ID与之匹配 所有节点的任何Id标记,如果匹配,则打印该节点供应商Id。如果没有找到匹配项,请离开该供应商ID。我需要像我那样重新考虑相同的程序 将获得最高客户与最低供应商之间的关系。
在上面的XML数据中,我需要像这样打印
bvr
raj
svr dvr klr
avr csr ksr (empty) ssn qis nan
(bpv wrr sdr) (bvs vvs ssv)
这里“bvr”是顶级客户,因为它不等于数据节点的任何Id标签。然后打印这是顶级customer.next打印节点Id和该节点供应商ID。 现在strat使用此供应商Id,匹配每个供应商Id等于数据节点的任何Id标签,在此示例中“供应商Id =”svr“”等于第二个数据节点“Id” 然后打印供应商Id。然后去搜索相同的程序,以便重新保留顶级客户的供应商ID。在该示例中,第二供应商Id“dvr”与any不匹配 数据节点Id所以只打印那个。第三个供应商ID与最后一个数据节点Id匹配,因此打印最后一个数据供应商Id。然后现在去“svr供应商Id做同样的程序。
我刚刚以图表形式显示了理解。如何打印此标记元素数据。 请帮助我,因为我是初学者。对我来说非常复杂。
答案 0 :(得分:0)
对于初学者,您可以使用XML::LibXML来解析XML并将其转换为DOM树。请参阅下面的示例,其中加载了Id
标记的示例和打印值:
use XML::LibXML;
my $dom = XML::LibXML->load_xml(location => 'filename.xml');
my $root = $dom->documentElement();
for my $data ($root->findnodes('data')) {
print $data->findvalue('Id'), "\n";
}
查看XML::LibXML::Node和XML::LibXML::Element,了解访问数据和遍历的可用方法。