maxpoitn2point
@maxpoitn2point
Как всегда, в своем репертуаре

Парсинг xml. Как обойти проблему с одной позицией в документе?

Изучаю питон, в части парсинга xml и занесения данных в базу данных.
для парсинга использую библиотеку xmltodict, поскольку, она парсит файл и предоставляет его в виде словаря.

есть xml вида
<wb:Content>
  <wb:Position>
    <wb:Identity>1</wb:Identity>
    <wb:Product>
      <pref:Type>АП</pref:Type>
      <pref:FullName>Название</pref:FullName>
      <pref:AlcCode>0323103000001227178</pref:AlcCode>
      <pref:Capacity>0.500</pref:Capacity>
      <pref:UnitType>Packed</pref:UnitType>
      <pref:AlcVolume>4.000</pref:AlcVolume>
      <pref:ProductVCode>500</pref:ProductVCode>
      <pref:Producer>  ...      </pref:Producer>
    </wb:Product>
    <wb:Quantity>20.000</wb:Quantity>
    <wb:Price>57.19</wb:Price>
    <wb:Party>Партия №60074</wb:Party>
    <wb:FARegId>000000000000</wb:FARegId>
    <wb:InformF2>  ...  </wb:InformF2>
  </wb:Position>
</wb:Content>

проблема заключается в том, что элементов wb:Position может быть несколько.
учитывая специфику работы библиотеки если элемент wb:Position один, то обращение к его дочерним элементам будет происходить без использования вложенного списка. Например позиция всего одна:
xml['wb:Content']['wb:Position']['wb:Identity']

если их несколько то:

xml['wb:Content']['wb:Position'][3]['wb:Identity']

Заведомо не известно, сколько будет элементов wb:Position, если перебирать циклом, то можно поймать исключение, поскольку ключа 0 не существует.
Как проверять количество элементов wb:Position? или будет лучше использовать другой парсер?
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Ну можно тупо try и если exception, то значит вложен один элемент. Тупо, но если «на разовый скриптик» - пойдет наверно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
Так сделать цикл и встроить обработку возможности отсутствия
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы