Попытка найти лучший способ навигации по XML-файлу в Python. В настоящее время есть что-то похожее на это.
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
TagSlug = '{http://www.aec.gov.au/xml/schema/mediafeed}'
for child in root:
DID = child.find('PollingDistrictIdentifier')
for grandchild in child.getchildren():
Name = grandchild.find('TagSlug+Name')
for grandgrandchild in grandchild.getchildren():
for grandgrandgrandchild in grandgrandchild.getchildren():
PP = grandgrandchild.find(TagSlug+'PollingPlaceIdentifier')
print(PP.attrib['Id'], PP.attrib['Name'], DID.attrib['Id'], Name.text)
XML структурирован, как показано ниже.
<PollingDistrictList Created="2018-10-30T12:01:21.043" xmlns="http://www.aec.gov.au/xml/schema/mediafeed" xmlns:eml="urn:oasis:names:tc:evs:schema:eml" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:xnl="urn:oasis:names:tc:ciq:xsdschema:xNL:2.0" xmlns:ts="urn:oasis:names:tc:evs:schema:eml:ts" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<TransactionId>4C59F7F3-2405-4443-8A1F-3F2BEF6E07C4</TransactionId>
<eml:EventIdentifier Id="12122">
<eml:EventName>State Election 2018</eml:EventName>
</eml:EventIdentifier>
<PollingDistrict>
<PollingDistrictIdentifier Id="10153">
<Name>Albert Park District</Name>
</PollingDistrictIdentifier>
<PollingPlaces>
<PollingPlace>
<PollingPlaceIdentifier Id="13133" Name="Bridport" />
<WheelchairAccess>None</WheelchairAccess>
</PollingPlace>
<PollingPlace>
<PollingPlaceIdentifier Id="13987" Name="Kerferd South" />
<WheelchairAccess>None</WheelchairAccess>
</PollingPlace>
<PollingPlaceIdentifier Id="13504" Name="Middle Park" />
<WheelchairAccess>None</WheelchairAccess>
</PollingPlace>
</PollingDistrict>
<PollingDistrict>
<PollingDistrictIdentifier = ....
et cetera
Я пытаюсь распечатать список идентификаторов избирательных участков, названий избирательных участков, идентификаторов округов и названий районов, но борюсь с последней частью. Я пробовал несколько разных вещей, вот некоторые из методов:
a = tree.findall('./PollingDistrictList/PollingDistrict/PollingPlaces/PollingPlace')
print(a.text)
a = tree.findall('.//PollingPlace')
print(a.text)
В итоге я получаю сообщения об ошибках, которые не имеют «тип» или «список», не имеют атрибута «текст», и если я удалил «.text», я ничего не получу. Я ищу, чтобы найти лучший способ навигации по XML-файлу вместо того, чтобы делать этот рекурсивный материал «дочерний в корне».
В идеале я бы получил:
[PP1Id], [PP1Name], [District1Id], [District1Name]
[PP2Id], [PP2Name], [District1Id], [District1Name]
...
[PP1Id], [PP1Name], [District2Id], [District2Name]
etc
Любой совет будет оценен.