Вложенный синтаксический анализ XML с использованием Python Element Tree или Minidom - PullRequest
0 голосов
/ 13 июня 2018

Я изо всех сил пытаюсь проанализировать xml-файл, используя python, поскольку он имеет вложенную структуру.

Мой XML-файл выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<DvMCLIResult version="8.6.0-00">
<CommandResult command="GetStorageArray">
<StorageArray objectID="ARRAY.R800.20454" name="POD1_SU73CYBSVSPF01" 
description="VSP G1500 (20454) at 10.181.35.238" serialNumber="20454" 
arrayFamily="R800" arrayType="R800" ...output truncated as I have similar 50 
values...... />
</CommandResult>
</DvMCLIResult>

Я ищу информацию о "StorageArray "в двух переменных, например

Key & value.Например.(Ключ должен получить значение «objectID», а значение должно получить «ARRAY.R800.20454» и т. Д. Для всех оставшихся элементов в цикле. «StorageArray» содержит более 50 элементов, поэтому я обрезал файл XML.

Я буду печатать значения, как показано ниже

Key,Value
objectID,ARRAY.R800.20454
name,POD1_SU73CYBSVSPF01
description,VSP G1500 (20454) at 10.181.35.238
serialNumber,20454
arrayFamily,R800
arrayType,R800 and so on

Мой код:

def  Parse_GetStorageArray():
# Parse the XML to the text file as "Component" "Identifier" "Status"    
#"Result" format
    xmlfile = HiCommandCLI_XML_Path+'/GetStorageArray.xml'
    with open(xmlfile, 'rt') as f:
      tree = ElementTree.parse(f)

      for element in tree.getiterator('StorageArray'):
          items=element.getchildren()
          for content in items:
              print (content.tag)

1 Ответ

0 голосов
/ 13 июня 2018

Ваша проблема с этой строкой:

    items=element.getchildren()

Элемент StorageArray не имеет дочерних элементов;он имеет только атрибуты.

Вы должны использовать это вместо:

    items = element.attrib

items будет словарь, который вы можете затем перебрать ...

{'objectID': 'ARRAY.R800.20454', 
'name': 'POD1_SU73CYBSVSPF01',
'description': 'VSP G1500 (20454) at 10.181.35.238', 
'serialNumber': '20454',
'arrayFamily': 'R800', 
'arrayType': 'R800'}
...