Как напечатать данные XML, как это? - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть 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 любого узла данных, тогда этот клиент является верхнимпокупатель.если мы нашли лучшего клиента, то выведите этот идентификатор узла, а затем идентификатор этого узла.на основе каждого идентификатора поставщика этого узла, мне нужно сопоставить. Идентификатор этого поставщика сопоставляется с любым тегом идентификатора всех узлов, если найденное совпадение выводит идентификаторы поставщика этого узла.если совпадений не найдено, просто оставьте этот идентификатор поставщика.Мне нужно повторить ту же процедуру, что и тогда, я получу связь между главным клиентом и нижним поставщиком.

В приведенных выше XML-данных мне нужно напечатать вот так

                                   bvr

                                   raj
                   svr             dvr          klr
      avr          csr      ksr   (empty)   ssn  qis nan
 (bpv wrr sdr) (bvs vvs ssv)

здесь "bvr" - главный клиент, поскольку он не равен ни одному тегу Id узлов данных.затем напечатайте это top customer.next выведите идентификатор узла и идентификаторы поставщиков этого узла.Теперь начнем с использования этого идентификатора поставщика, сопоставьте идентификатор каждого поставщика, равный любому тегу Id узлов данных, в этом примере «Id поставщика» = «svr» «равен второму узлу данных« Id », затем распечатайте идентификаторы этого поставщика.затем идите и ищите ту же процедуру для остальных идентификаторов поставщиков.в этом примере идентификатор второго поставщика "dvr" не сопоставлен ни с одним идентификатором узла данных, поэтому просто распечатайте его.идентификатор третьего поставщика сопоставляется с последним идентификатором узла данных, поэтому выведите последние идентификаторы поставщика данных.затем перейдите к "Идентификатор поставщика svr делает ту же процедуру.

Просто я показал в форме представления графа для понимания. Как я могу напечатать эти элементы тега с такими данными. Пожалуйста, помогите мне кому-нибудь, потому что я очень новичок.Это очень сложно для меня.

1 Ответ

0 голосов
/ 24 ноября 2011

Для начала вы можете использовать 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 , чтобы узнать о доступных методах доступа к данным и обхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...