如何像这样打印xml数据?

如何像这样打印xml数据?,xml,perl,Xml,Perl,我有这样的XMl文件 <orderinfo> <data> <Id>raj</Id> <Customer>bvr</Customer> <Suppliers> <Supplier Id="svr" /> <Supplier Id="dvr" /> <Supplier Id="klr" /> </Suppliers> <

我有这样的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>
这里“bvr”是顶级客户,因为它不等于数据节点的任何Id标记。然后打印这是顶级客户。下一步打印该节点Id和该节点供应商Id。 现在开始使用此供应商Id,匹配每个供应商Id等于数据节点的任何Id标记,在本例中,“供应商Id=“svr”等于第二个数据节点“Id” 然后打印供应商Id。然后去搜索相同的程序,重新生成顶级客户的供应商Id。在此示例中,第二个供应商Id“dvr”与任何 数据节点Id,所以只需打印该Id即可。第三个供应商Id与最后一个数据节点Id匹配,因此打印最后一个数据供应商Id。然后现在转到“svr供应商Id”,执行相同的程序

为了理解,我展示了图形表示形式。我怎样才能像那样打印这些标记元素数据。 请帮助我,因为我是初学者。这对我来说非常复杂。

对于初学者,您可以使用解析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”“无效。XML需要一个根元素,所以问题分为两部分。1/将XML转换为合适的节点树。2/把那棵树变成某种图形表示。你到底被困在哪里了?到目前为止你有什么?@帮助我将xml转换为节点树。
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";
}