Как проанализировать строку XML с несколькими одинаковыми полями и вложенными данными, используя ElementTree? - PullRequest
0 голосов
/ 21 марта 2019

Я получаю данные XML с сервера, сохраняю их в виде строки, содержащей несколько полей с одинаковыми именами, а также вложенные данные.Как мне разобрать это правильно?Вот пример того, как это может выглядеть.

 <Product>
     <ProductNumber>14432</ProductNumber>
     <CreationDate>2019</CreationDate>
     <ProductVersion>
        <Config>A</Config>
        <Design>1</Design>
        <DesignCreated>2018</DesignCreated>
        <DesignedBy>Jon</DesignedBy>
        <Design>2</Design>
        <DesignCreated>2019</DesignCreated>
        <DesignedBy>Doe</DesignedBy>
     </ProductVersion>
 </Product>

Пока я занимаюсь

    import ElementTree as ET
    tree = ET.fromstring(content_string))

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

  tree.find('ProductVersion') 

, я получаю

   attrib: {}
   tag 'ProductVersion'
   tail: None
   text: None

Итак, что я сделал до сих пор:

    product_version_start = str(content_string).find("<ProductVersion>")-2
    product_version_end = str(content_string).find("</ProductVersion>")+15

Чтобы найти подстроку в моей строке XML и создатьновое дерево из этого.

    tree_productVersion = ET.fromstring(content_string[product_version_start:product_version_end])

Но теперь, когда я пытаюсь

    tree_productversion.find('Design').text

, возвращается только первое поле.Я хочу получить доступ ко всем полям и получить всю информацию.

Итак, поэтому у меня два вопроса, есть ли лучший способ для анализа вложенных данных?И как мне проанализировать все поля, если они имеют одинаковые имена?

1 Ответ

0 голосов
/ 21 марта 2019

Вы можете просто перебрать дочерние элементы <ProductVersion>.

pv = tree.find('ProductVersion') 
for child in pv:
    print(child.text)

Вывод:

A
1
2018
Jon
2
2019
Doe
...