我有以下XML结构:
<celestialBodies>
<stars>
<star>
<item name="Name">Sun</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</star>
</stars>
<planets>
<planet>
<item name="Name">Mercury</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
<planet>
<item name="Name">Venus</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
<planet>
<item name="Name">Earth</item>
<item name="Distance from the Earth">0</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
<planet>
<item name="Name">Mars</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
<planet>
<item name="Name">Jupiter</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
<planet>
<item name="Name">Saturn</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
<planet>
<item name="Name">Uranus</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
<planet>
<item name="Name">Neptune</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
<planet>
<item name="Name">Pluto</item>
<item name="Distance from the Earth">100000</item>
<item name="Size">9</item>
<item name="Moons">A,B,C</item>
<item name="Gravity">0.4</item>
<item name="Elements Found">H, HE, C</item>
<item name="Orbiting Time">15</item>
<item name="Day Time">12</item>
</planet>
</planets>
</celestialBodies>
我想把它们读入python3中创建的对象中。你知道吗
我有以下循环:
# Create the solar system
celestialBodies = list()
for i in range(10):
planet = Planet("Mercury", 1000000, 0.5, 0.1, ['Moon A', 'Moon B'], ['Hydrogen, Nitrogen'], 8, 0.15)
celestialBodies.append(planet)
但正如您所看到的,我希望以一种好的方式从XML文件中获取数据,而不是自己硬编码行星。因此,与其说“水星”,不如说它穿过树,把每个天体的值转化为变量,然后创建一个物体。你知道吗
我无法理解的是XML阅读部分。无论我尝试了什么,我都无法循环通过级别将值读入变量。我已经试过BeautifulSoup,lxml,ET了,但是没有成功。你知道吗
一些试验:
root = lxml.etree.fromstring('planet_info.xml')
results = root.findall('planets')
textnumbers = [r.find('planet/name').text for r in results]
print(textnumbers)
或者
solarSystem = ET.parse('planet_info.xml')
celestialBodies = solarSystem.getroot()
for bodies in celestialBodies:
for star in bodies[0]:
print(star.tag, star.attrib, star.nodeValue)
每一个都会产生错误。应该有一个简单的方法。你知道吗
有什么建议吗?你知道吗
编辑:因此,通过以下步骤,我可以联系到两个孩子,但不能再联系了:
# Get the data from the XML
solarSystem = ET.parse('planet_info.xml')
celestialBodies = solarSystem.getroot()
for bodies in celestialBodies:
print(bodies.tag, bodies.attrib)
输出:
stars {}
planets {}
如何在这些函数中循环并检索值?你知道吗
这段代码使用etree工作。缺少一行,该行仅返回
item
元素,这些元素的name
设置为某个值。你知道吗从这里你应该可以自己解决剩下的问题。希望有帮助。你知道吗
这里有一个简单的方法来迭代这个数据结构。为了保持代码的独立性,我直接从字符串而不是从文件中读取XML。你知道吗
输出
这个变体将数据加载到包含两个列表的字典中,一个是恒星列表,另一个是行星列表。这些列表中的每一个都包含该类别中每个主体的字典。我们可以使用
json
模块很好地打印数据。你知道吗输出
首先,您可以找到行星和恒星元素,将它们添加到列表中并从中选择第一个值。你知道吗
相关问题 更多 >
编程相关推荐