Десериализация XML в Python - PullRequest
       1

Десериализация XML в Python

1 голос
/ 10 октября 2019

Я видел эти вопросы, которые задавались ранее, но я не видел ответа, который решал бы десериализацию структуры xml, которую я пытаюсь выполнить. Я пришел из C #, поэтому python очень чужд для меня.

xml:

<?xml version="1.0" encoding="utf-8"?>
  <rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
   <channel>
    <title>blah blah</title>
    <item>
        <title>123</title>
        <description>Event Status</description>
        <a10:link href="xxx" />
        <REMITUrgentMarketMessages xmlns="xxxx">
            <UMM xmlns="">
                <messageId>A000000/messageId>
                <event>
                    <eventStatus>Inactive</eventStatus>
                    <eventType>Storage </eventType>
                    <eventStart>2019-10-06T09:43:00+01:00</eventStart>
                    <eventStop>2019-10-09T13:20:00+01:00</eventStop>
                </event>
                <unavailabilityType>Unplanned</unavailabilityType>
                <publicationDateTime>2019-10-09T13:21:19+01:00</publicationDateTime>
                <capacity>
                    <unitMeasure>TWh</unitMeasure>
                    <unavailableCapacity>1.03227</unavailableCapacity>
                    <availableCapacity>2.1317295</availableCapacity>
                    <technicalCapacity>3.1639995</technicalCapacity>
                </capacity>
                <unavailabilityReason>Failure</unavailabilityReason>
                <remarks> </remarks>
                <balancingZone>21YGB</balancingZone>
                <affectedAsset>
                    <name xmlns="http://www.acer.europa.eu/REMIT/REMITUMMCommonSchema_V1.xsd">xxxx</name>
                    <eic xmlns="http://www.acer.europa.eu/REMIT/REMITUMMCommonSchema_V1.xsd">xxxx</eic>
                </affectedAsset>
                <marketParticipant>
                    <name xmlns="http://www.acer.europa.eu/REMIT/REMITUMMCommonSchema_V1.xsd">vvvvv</name>
                    <ace xmlns="http://www.acer.europa.eu/REMIT/REMITUMMCommonSchema_V1.xsd">vvvvvv</ace>
                </marketParticipant>
            </UMM>
        </REMITUrgentMarketMessages>
    </item>
    <item>
        <title>458</title>
        <description>Event Status</description>
        <a10:link href="xxxxx" />
        <REMITUrgentMarketMessages xmlns="xxxxxx">
            <UMM xmlns="">
                <messageId>A000001</messageId>
                <event>
                    <eventStatus>Dismissed</eventStatus>
                    <eventType>Storage</eventType>
                    <eventStart>2019-10-06T09:43:00+01:00</eventStart>
                    <eventStop>2019-10-10T18:00:00+01:00</eventStop>
                </event>
                <unavailabilityType>Unplanned</unavailabilityType>
                <publicationDateTime>2019-10-06T09:45:22+01:00</publicationDateTime>
                <capacity>
                    <unitMeasure>TWh</unitMeasure>
                    <unavailableCapacity>1.03227</unavailableCapacity>
                    <availableCapacity>2.1317295</availableCapacity>
                    <technicalCapacity>3.1639995</technicalCapacity>
                </capacity>
                <unavailabilityReason>Failure</unavailabilityReason>
                <remarks> </remarks>
                <balancingZone>21YGB</balancingZone>
                <affectedAsset>
                    <name xmlns="http://www.acer.europa.eu/REMIT/REMITUMMCommonSchema_V1.xsd">sssss</name>
                    <eic xmlns="http://www.acer.europa.eu/REMIT/REMITUMMCommonSchema_V1.xsd">sssss</eic>
                </affectedAsset>
                <marketParticipant>
                    <name xmlns="http://www.acer.europa.eu/REMIT/REMITUMMCommonSchema_V1.xsd">uguu</name>
                    <ace xmlns="http://www.acer.europa.eu/REMIT/REMITUMMCommonSchema_V1.xsd">vvvvv</ace>
                </marketParticipant>
            </UMM>
        </REMITUrgentMarketMessages>
    </item>
 </channel>
</rss>

Я пытался использовать xml.etree.ElementTree для загрузки в дерево и длязацикливание на узлах, однако я не рассматриваю это как элегантное решение и думаю, что использование BeautifulSoup, как показано в приведенном ниже коде, лучшесуществует в python, который преобразует строку xml в класс

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