2015-06-12 2 views
-3

Мне нужно извлечь элементы xml из заданного xml, когда значения равны null или NA.Как анализировать xml и извлекать элементы и писать в новый xml с заданным условием

<?xml version="1.0" encoding="UTF-8"?> 
    <log> 
    <logentry revision="21754"> 
    <author>Madhu</author> 
    <date>2015-05-12</date> 
    <QC_ID>NA</QC_ID> 
    <Rally_ID>US4940</Rally_ID> 
    <Description>HotFix_MaxConnectionReduction.dBAssembly.xml file in Release- Branch</Description> 
    <HP_Code_ReviewID>CR1234</HP_Code_ReviewID> 
    <Deployment_Change_Needed>No</Deployment_Change_Needed> 
    <Deployment_Change_Description>NA 
    </Deployment_Change_Description> 
    </logentry> 
    <logentry revision="21779"> 
    <author>sudha</author> 
    <date>2015-05-19</date> 
    <QC_ID>NA</QC_ID> 
    <Rally_ID>US4940</Rally_ID> 
    <Description> Adding Release-Branch</Description> 
    <HP_Code_ReviewID> NA</HP_Code_ReviewID> 
    <Deployment_Change_Needed>No</Deployment_Change_Needed> 
    <Deployment_Change_Description>NA 
    </Deployment_Change_Description> 
</logentry> 
<logentry revision="21808"> 
<author>sudha</author> 
<date>2015-05-25</date> 
<QC_ID>NA</QC_ID> 
<Rally_ID>US4940</Rally_ID> 
<Description> modifying 15.6.1 in PP Release-Branch to bring new spaces in modules </Description> 
<HP_Code_ReviewID> NA</HP_Code_ReviewID> 
<Deployment_Change_Needed>No</Deployment_Change_Needed> 
<Deployment_Change_Description>NA 
</Deployment_Change_Description> 
</logentry> 
</log> 

Мне нужно извлечь элементы XML, когда значения равны нулю или NA

и создать новый XML для обработки

Ожидаемый результат от Приведенный выше пример («значения HP_Code_ReviewID тег NA»)

<?xml version="1.0" encoding="UTF-8"?> 
<log> 
<logentry revision="21808"> 
<author>sudha</author> 
<date>2015-05-25</date> 
<QC_ID>NA</QC_ID> 
<Rally_ID>US4940</Rally_ID> 
<Description> modifying 15.6.1 in PP Release-Branch to bring new spaces in modules </Description> 
<HP_Code_ReviewID> NA</HP_Code_ReviewID> 
<Deployment_Change_Needed>No</Deployment_Change_Needed> 
<Deployment_Change_Description>NA 
</Deployment_Change_Description> 
</logentry> 
</log> 
+0

Добро пожаловать на Stack Overflow. Пожалуйста, найдите минутку, чтобы прочитать [ask]. Вы должны показать нам, что вы пробовали, поскольку мы не являемся сервисом написания кода. – simbabque

ответ

0

Perl имеет отличную XML::Twig библиотеку, которая может быть использована для XML-анализа и решения проблем, как вы обрисовать. Я предложаю вам пример стартера, но имейте в виду, что Stack Overflow помогает вам решать проблемы с вашим кодом, а не писать код для вас.

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::Twig; 

my $twig = XML::Twig->new(
    'pretty_print' => 'indented_a', 
    'twig_handlers' => { 
     'HP_Code_ReviewID' => sub { 
      if ($_->text =~ m/NA/) { $_->parent->print } 
     } 
    } 
)->parse(\*DATA); 

__DATA__ 
<?xml version="1.0" encoding="UTF-8"?> 
    <log> 
    <logentry revision="21754"> 
    <author>Madhu</author> 
    <date>2015-05-12</date> 
    <QC_ID>NA</QC_ID> 
    <Rally_ID>US4940</Rally_ID> 
    <Description>HotFix_MaxConnectionReduction.dBAssembly.xml file in Release- Branch</Description> 
    <HP_Code_ReviewID>CR1234</HP_Code_ReviewID> 
    <Deployment_Change_Needed>No</Deployment_Change_Needed> 
    <Deployment_Change_Description>NA 
    </Deployment_Change_Description> 
    </logentry> 
    <logentry revision="21779"> 
    <author>sudha</author> 
    <date>2015-05-19</date> 
    <QC_ID>NA</QC_ID> 
    <Rally_ID>US4940</Rally_ID> 
    <Description> Adding Release-Branch</Description> 
    <HP_Code_ReviewID> NA</HP_Code_ReviewID> 
    <Deployment_Change_Needed>No</Deployment_Change_Needed> 
    <Deployment_Change_Description>NA 
    </Deployment_Change_Description> 
</logentry> 
<logentry revision="21808"> 
<author>sudha</author> 
<date>2015-05-25</date> 
<QC_ID>NA</QC_ID> 
<Rally_ID>US4940</Rally_ID> 
<Description> modifying 15.6.1 in PP Release-Branch to bring new spaces in modules </Description> 
<HP_Code_ReviewID> NA</HP_Code_ReviewID> 
<Deployment_Change_Needed>No</Deployment_Change_Needed> 
<Deployment_Change_Description>NA 
</Deployment_Change_Description> 
</logentry> 
</log> 

Это устанавливает обработчик для прута HP_Code_ReviewID' and if the text in it contains NA` печатает родительский элемент.

Обратите внимание, что это явно не действительный XML, поскольку он только фиксирует элемент logentry. Однако вы можете делать что-то с XML :: Twig как удаление элементов, которые не соответствуют, а затем отображают остальную часть документа.

Это печатает:

<logentry revision="21779"> 
    <author>sudha</author> 
    <date>2015-05-19</date> 
    <QC_ID>NA</QC_ID> 
    <Rally_ID>US4940</Rally_ID> 
    <Description> Adding Release-Branch</Description> 
    <HP_Code_ReviewID> NA</HP_Code_ReviewID> 
    </logentry> 
    <logentry revision="21808"> 
    <author>sudha</author> 
    <date>2015-05-25</date> 
    <QC_ID>NA</QC_ID> 
    <Rally_ID>US4940</Rally_ID> 
    <Description> modifying 15.6.1 in PP Release-Branch to bring new spaces in modules </Description> 
    <HP_Code_ReviewID> NA</HP_Code_ReviewID> 
    </logentry> 

сохранить их в контексте, вы - в основном - нужно удалить вещи, которые не матч:

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::Twig; 

my $twig = XML::Twig->new(
    'pretty_print' => 'indented_a', 
    'twig_handlers' => { 
     'logentry' => sub { 
      if (not $_->first_child_text('HP_Code_ReviewID') =~ m/NA/) { 
       $_->delete; 
      } 
     } 
    } 
)->parse(\*DATA)->print; 

(тот же блок DATA как указано выше).

Это будет печатать:

<?xml version="1.0" encoding="UTF-8"?> 
<log> 
    <logentry revision="21779"> 
    <author>sudha</author> 
    <date>2015-05-19</date> 
    <QC_ID>NA</QC_ID> 
    <Rally_ID>US4940</Rally_ID> 
    <Description> Adding Release-Branch</Description> 
    <HP_Code_ReviewID> NA</HP_Code_ReviewID> 
    <Deployment_Change_Needed>No</Deployment_Change_Needed> 
    <Deployment_Change_Description>NA 
    </Deployment_Change_Description> 
    </logentry> 
    <logentry revision="21808"> 
    <author>sudha</author> 
    <date>2015-05-25</date> 
    <QC_ID>NA</QC_ID> 
    <Rally_ID>US4940</Rally_ID> 
    <Description> modifying 15.6.1 in PP Release-Branch to bring new spaces in modules </Description> 
    <HP_Code_ReviewID> NA</HP_Code_ReviewID> 
    <Deployment_Change_Needed>No</Deployment_Change_Needed> 
    <Deployment_Change_Description>NA 
</Deployment_Change_Description> 
    </logentry> 
</log>