Разбор XML с Python - Доступ к значениям - PullRequest
0 голосов
/ 04 февраля 2019

Я недавно получил RaspberryPi и начал изучать Python.Для начала я хочу проанализировать файл XML и делаю это через библиотеку untangle.

Мой XML выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<weatherdata>
  <location>
    <name>Katherine</name>
    <type>Administrative division</type>
    <country>Australia</country>
    <timezone id="Australia/Darwin" utcoffsetMinutes="570" />
    <location altitude="176" latitude="-14.65012" longitude="132.17414" geobase="geonames" geobaseid="7839404" />
  </location>
  <sun rise="2019-02-04T06:33:52" set="2019-02-04T19:16:15" />
  <forecast>
    <tabular>
      <time from="2019-02-04T06:30:00" to="2019-02-04T12:30:00" period="1">
        <!-- Valid from 2019-02-04T06:30:00 to 2019-02-04T12:30:00 -->
        <symbol number="9" numberEx="9" name="Rain" var="09" />
        <precipitation value="1.8" />
        <!-- Valid at 2019-02-04T06:30:00 -->
        <windDirection deg="314.8" code="NW" name="Northwest" />
        <windSpeed mps="3.3" name="Light breeze" />
        <temperature unit="celsius" value="26" />
        <pressure unit="hPa" value="1005.0" />
      </time>
      <time from="2019-02-04T12:30:00" to="2019-02-04T18:30:00" period="2">
        <!-- Valid from 2019-02-04T12:30:00 to 2019-02-04T18:30:00 -->
        <symbol number="9" numberEx="9" name="Rain" var="09" />
        <precipitation value="2.3" />
        <!-- Valid at 2019-02-04T12:30:00 -->
        <windDirection deg="253.3" code="WSW" name="West-southwest" />
        <windSpeed mps="3.0" name="Light breeze" />
        <temperature unit="celsius" value="29" />
        <pressure unit="hPa" value="1005.0" />
      </time>
    </tabular>
  </forecast>
</weatherdata>

Из этого я хотел бы иметь возможностьчтобы распечатать атрибуты from и to элемента <time>, а также атрибут value в его дочернем узле <temperature>

Я могу правильно распечатать значения температуры, если я выполнюскрипт Python ниже:

for forecast in data.weatherdata.forecast.tabular.time:
  print (forecast.temperature['value'])

, но если я запускаю

for forecast in data.weatherdata.forecast.tabular:
  print ("time is " + forecast.time['from'] + "and temperature  is " + forecast.time.temperature['value'])

, я получаю сообщение об ошибке:

print (forecast.time['from'] + forecast.time.temperature['value'])
TypeError: list indices must be integers, not str

Может кто-нибудь посоветовать, как мне правильно получить доступ к этимзначения?

1 Ответ

0 голосов
/ 04 февраля 2019

forecast.time должен быть списком, поскольку он имеет несколько значений, по одному для каждого <time> узла.

Вы ожидали, что forecast.time['from'] автоматически агрегирует эти данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...