2013-12-24 1 views
1

У меня есть следующие ОВАЛ definintion и хотите, чтобы разобрать его и хранить его на конкретном объекте PERL, как реф массив, а затем к нему доступ как объектРазбор вложенных овальную файл с XML :: Twig

, например, чтобы получить доступ к первому комментарии attrbitue приводимого ниже XML:

<criteria operator="OR"> 

    <criteria operator="AND"> 
    <criterion test_ref="oval:org.mitre.oval:tst:123" comment="Windows XP is installed"/> 
    <criterion test_ref="oval:org.mitre.oval:tst:234" comment="file foo.txt exists"/> 
    </criteria> 
    <criteria operator="AND" negate="true"> 
    <criterion test_ref="oval:org.mitre.oval:tst:345" comment="Windows 2003 is installed"/> 
    <criterion test_ref="oval:org.mitre.oval:tst:456" comment="file fred.txt has a version less than 2"/> 
    <criterion test_ref="oval:org.mitre.oval:tst:567" negate="true" comment=patch is installed"/> 
    </criteria> 
    <criterion test_ref="oval:org.mitre.oval:tst:345" comment="Windows 2003 is installed"/> 
    </criteria> 




it will be somthing like this: 

     $arr->[0]->[1]->{oval-org-mitre-oval-tst-123}->{comment} 

Я попытался разобрать его с XML :: Twig обработчиками и я получаю элемент критериев, но я не знаю, как относиться к вложенным критериям элементов для того, чтобы построить мой Perl объект/структура данных

любая идея, как я могу hieve this with XML :: Twig and perl?

+0

Ваш 'xml' не очень хорошо образован. Он пропустил хотя бы одну двойную кавычку и открывающий тег. – Birei

+0

Спасибо за ответ, я исправил свой xml, но если у меня внутри внутренней crteria еще один вложенный критерий, как я могу построить вложенный объект, например: criteria1-> ctriteria2-> criteria3-> criterion_comment – user3019319

+0

Вы не исправили это. Вы изменили спецификацию. Это совсем другое, и теперь вы сделали мой ответ недействительным. Но с этим я надеюсь, что он может быть полезен для вас. – Birei

ответ

3

Вы можете попробовать выбрать <criteria> элементы, используя twig_handlers() и внутри них <criterion> элементы с children() и сохранить либо атрибуты в хэш, который выталкивается в массив исх переменной.

С вашей фиксированной xml файла $arr будет как:

0 ARRAY(0x25f9200) 
    0 HASH(0x3613958) 
     'oval-org-mitre-oval-tst-123' => 'Windows XP is installed' 
     'oval-org-mitre-oval-tst-234' => 'file foo.txt exists' 
    1 HASH(0x360e068) 
     'oval-org-mitre-oval-tst-345' => 'Windows 2003 is installed' 
     'oval-org-mitre-oval-tst-456' => 'file fred.txt has a version less than 2' 
     'oval-org-mitre-oval-tst-567' => 'patch is installed' 
    2 HASH(0x3613430) 
     'oval-org-mitre-oval-tst-345' => 'Windows 2003 is installed' 
+0

Даже ваш ответ не отвечает на мой вопрос напрямую, это было полезно +1 для этого – user3019319