Python 如何将XML文件解析为列表?

Python 如何将XML文件解析为列表?,python,xml,Python,Xml,我试图用Python将XML文件解析为列表。我已经在这个网站和其他网站上看到了一些解决方案,但无法让它们为我工作。我已经设法做到了,但是用了一种我觉得很愚蠢的费力的方式。看来应该有更简单的办法 我曾试图修改其他人的代码以满足我的需要,但这并不奏效,因为我并不总是确定我在读什么 这是XML文件: <?xml version="1.0"?> <configuration> <location name ="location"> <la

我试图用Python将XML文件解析为列表。我已经在这个网站和其他网站上看到了一些解决方案,但无法让它们为我工作。我已经设法做到了,但是用了一种我觉得很愚蠢的费力的方式。看来应该有更简单的办法

我曾试图修改其他人的代码以满足我的需要,但这并不奏效,因为我并不总是确定我在读什么

这是XML文件:

<?xml version="1.0"?>
<configuration>
    <location name ="location">
        <latitude>54.637348</latitude>
        <latHemi>N</latHemi>
        <longitude>5.829723</longitude>
        <longHemi>W</longHemi>
    </location>
    <microphone name="microphone">
        <sensitivity>-26.00</sensitivity>
    </microphone>
    <weighting name="weighting">
        <cWeight>68</cWeight>
        <aWeight>2011</aWeight>
    </weighting>
    <optionalLevels name="optionalLevels">
        <L95>95</L95>
        <L90>90</L90>
        <L50>50</L50>
        <L10>10</L10>
        <L05>05</L05>
        <fmax>fmax</fmax>
    </optionalLevels>
    <averagingPeriod name="averagingPeriod">
        <onemin>1</onemin>
        <fivemin>5</fivemin>
        <tenmin>10</tenmin>
        <fifteenmin>15</fifteenmin>
        <thirtymin>30</thirtymin>
    </averagingPeriod>
    <timeWeighting name="timeWeighting">
        <fast>fast</fast>
        <slow>slow</slow>
    </timeWeighting>
    <rebootTime name="rebootTime">
        <midnight>midnight</midnight>
        <sevenAm>7am</sevenAm>
        <sevenPm>7pm</sevenPm>
        <elevenPm>23pm</elevenPm>
    </rebootTime>
    <remoteUpload name="remoteUpload">
        <nointernet>nointernet</nointernet>
        <vodafone>vodafone</vodafone>
    </remoteUpload>
</configuration>

你提出的问题不是很明确。XML结构首先与列表结构不太一致。如果您是python新手,我认为最好的方法是使用类似的方法将xml中的隐式模式解析为python数据结构

e、 g

导入xmltodict
xml=”“”
54.637348
N
5.829723
W
-26.00
68
2011
95
90
50
10
05
fmax
1.
5.
10
15
30
快速的
缓慢的
午夜
上午7点
晚上7点
晚上23点
网络
沃达丰
"""
d=xmltodict.parse(xml)

您提出的问题没有很好地定义。XML结构首先与列表结构不太一致。如果您是python新手,我认为最好的方法是使用类似的方法将xml中的隐式模式解析为python数据结构

e、 g

导入xmltodict
xml=”“”
54.637348
N
5.829723
W
-26.00
68
2011
95
90
50
10
05
fmax
1.
5.
10
15
30
快速的
缓慢的
午夜
上午7点
晚上7点
晚上23点
网络
沃达丰
"""
d=xmltodict.parse(xml)

谢谢您的评论。如果问题提出得不好,很抱歉。我自己也找到了答案。我希望将XML子元素解析为一个列表,以便以后在另一个程序中使用。我想出来了。谢谢您的耐心。

谢谢您的评论。如果问题提出得不好,很抱歉。我自己也找到了答案。我希望将XML子元素解析为一个列表,以便以后在另一个程序中使用。我想出来了。谢谢您的耐心。

欢迎来到StackOverflow。您能描述一下您希望从XML解析的预期输出吗?你可以问一下,你想要什么样的清单?顶级元素的单一平面列表?列表列表?欢迎来到StackOverflow。您能描述一下您希望从XML解析的预期输出吗?你可以问一下,你想要什么样的清单?顶级元素的单一平面列表?名单?
#!/usr/bin/python
import xml.etree.ElementTree as ET


import os
try:
    import cElementTree as ET
except ImportError:
    try:
        import xml.etree.cElementTree as ET
    except ImportError:
        exit_err("Failed to import cElementTree from any known place")

file_name = ('/home/mark/Desktop/Practice/config_settings.xml')
full_file = os.path.abspath(os.path.join('data', file_name))

dom = ET.parse(full_file)

tree = ET.parse(full_file)
root = tree.getroot()

location_settings = dom.findall('location')
mic_settings = dom.findall('microphone')
weighting = dom.findall('weighting')
olevels = dom.findall('optionalLevels')
avg_period = dom.findall('averagingPeriod')
time_weight = dom.findall('timeWeighting')
reboot = dom.findall('rebootTime')
remote_upload = dom.findall('remoteUpload')

for i in location_settings:

    latitude = i.find('latitude').text
    latHemi = i.find('latHemi').text
    longitude = i.find('longitude').text
    longHemi = i.find('longHemi').text


for i in mic_settings:
    sensitivity = i.find('sensitivity').text

for i in weighting:
    cWeight = i.find('cWeight').text
    aWeight = i.find('aWeight').text

for i in olevels:
    L95 = i.find('L95').text
    L90 = i.find('L90').text
    L50 = i.find('L50').text
    L10 = i.find('L10').text
    L05 = i.find('L05').text

for i in avg_period:
    onemin = i.find('onemin').text
    fivemin = i.find('fivemin').text
    tenmin = i.find('tenmin').text
    fifteenmin = i.find('fifteenmin').text
    thirtymin = i.find('thirtymin').text

for i in time_weight:
    fast = i.find('fast').text
    slow = i.find('slow').text

for i in reboot:
    midnight = i.find('midnight').text
    sevenAm = i.find('sevenAm').text
    sevenPm = i.find('sevenPm').text
    elevenPm= i.find('elevenPm').text

for i in remote_upload:
    nointernet = i.find('nointernet').text
    vodafone = i.find('vodafone').text

config_list = [latitude,latHemi,longitude,longHemi,sensitivity,aWeight,cWeight,
                L95,L90,L50,L10,L05,onemin,fivemin,tenmin,fifteenmin,thirtymin,
                fast,slow,midnight,sevenAm,sevenAm,elevenPm,nointernet,vodafone]
print(config_list)
import xmltodict
xml = """<?xml version="1.0"?>
<configuration>
    <location name ="location">
        <latitude>54.637348</latitude>
        <latHemi>N</latHemi>
        <longitude>5.829723</longitude>
        <longHemi>W</longHemi>
    </location>
    <microphone name="microphone">
        <sensitivity>-26.00</sensitivity>
    </microphone>
    <weighting name="weighting">
        <cWeight>68</cWeight>
        <aWeight>2011</aWeight>
    </weighting>
    <optionalLevels name="optionalLevels">
        <L95>95</L95>
        <L90>90</L90>
        <L50>50</L50>
        <L10>10</L10>
        <L05>05</L05>
        <fmax>fmax</fmax>
    </optionalLevels>
    <averagingPeriod name="averagingPeriod">
        <onemin>1</onemin>
        <fivemin>5</fivemin>
        <tenmin>10</tenmin>
        <fifteenmin>15</fifteenmin>
        <thirtymin>30</thirtymin>
    </averagingPeriod>
    <timeWeighting name="timeWeighting">
        <fast>fast</fast>
        <slow>slow</slow>
    </timeWeighting>
    <rebootTime name="rebootTime">
        <midnight>midnight</midnight>
        <sevenAm>7am</sevenAm>
        <sevenPm>7pm</sevenPm>
        <elevenPm>23pm</elevenPm>
    </rebootTime>
    <remoteUpload name="remoteUpload">
        <nointernet>nointernet</nointernet>
        <vodafone>vodafone</vodafone>
    </remoteUpload>
</configuration>"""
d = xmltodict.parse(xml)