如何打印这样的xml数据?

时间:2011-11-22 22:06:59

标签: xml perl

我有像这样的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做同样的程序。

我刚刚以图表形式显示了理解。如何打印此标记元素数据。 请帮助我,因为我是初学者。对我来说非常复杂。

1 个答案:

答案 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::NodeXML::LibXML::Element,了解访问数据和遍历的可用方法。