使用python和xml在一个元素上显示所有属性

时间:2019-05-27 20:02:04

标签: python xml

正如您在XML代码上看到的那样,每个pais的{​​{1}}带有标签idiomas,并且每个都有他的属性,我无法显示。我只是每个人中的第一个,但不是全部。

XML:

idioma

我正在显示我在此处尝试的代码,该代码仅向我显示元素<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paises SYSTEM "Paises_DTD.dtd"> <paises> <pais id="p1"> <nombre>España</nombre> <habitantes>46423034</habitantes> <extension unidad="km2">504645</extension> <gobierno tipo="monarquia" fecha="1978"/> <idiomas> <idioma nombre="castellano"/> <idioma nombre="catalan"/> <idioma nombre="euskera"/> <idioma nombre="gallego"/> </idiomas> </pais> <pais id="p2"> <nombre>Irán</nombre> <habitantes>79853900</habitantes> <extension unidad="km2">1648195</extension> <gobierno tipo="republica_islamica" fecha="1979"/> <idiomas> <idioma nombre="persa"/> </idiomas> </pais> <pais id="p3"> <nombre>Alemania</nombre> <habitantes>81292400</habitantes> <extension unidad="km2">357168</extension> <gobierno tipo="republica_federal" fecha="1990"/> <idiomas> <idioma nombre="aleman"/> </idiomas> </pais> <pais id="p4"> <nombre>Estados Unidos de América</nombre> <habitantes>316017000</habitantes> <extension unidad="km2">9371174</extension> <gobierno tipo="republica_federal"/> <idiomas> <idioma nombre="ingles"/> </idiomas> </pais> <pais id="p5"> <nombre>Líbano</nombre> <habitantes>6006668</habitantes> <extension unidad="km2">10400200</extension> <gobierno tipo="republica_parlamentaria"/> <idiomas> <idioma nombre="árabe"/> <idioma nombre="francés"/> <idioma nombre="armenio"/> <idioma nombre="español"/> <idioma nombre="portugués"/> </idiomas> </pais> <pais id="p6"> <nombre>Madagascar</nombre> <habitantes>24430325</habitantes> <extension unidad="km2">5870410</extension> <gobierno tipo="republica"/> <idiomas> <idioma nombre="malgache"/> <idioma nombre="francés"/> </idiomas> </pais> </paises> 中的一个属性:

idioma

本来应该显示每个Pais中from lxml import etree doc = etree.parse('Paises_XML.xml') raiz=doc.getroot() paises=doc.findall("pais") print(""" DATOS SOBRE IDIOMAS EN CADA PAIS 1- España 2- Irán 3- Alemania 4- EEUU 5- Libano 6- Madagascar 7- Salir """) valid_choices = ["1", "2", "3", "4", "5", "6"] while True: eleccion=input("Introduzca un número referente a un país de la lista observable: ") if eleccion in valid_choices: index = int(eleccion) - 1 print("") print (paises[index].find("nombre").text) print (paises[index].find("idiomas/idioma").attrib) elif eleccion== "7": print("") print("¡Hasta pronto!") break else: print("Opción no válida, elija un número del 1 al 6 para mostrar la información del país correspondiente") 的所有属性,但是我不知道该怎么做,所以这就是为什么我来这里

1 个答案:

答案 0 :(得分:0)

您应该遍历“成语”。请参见下面的代码。

(56331871.xml是您发布的数据)

from lxml import etree

doc = etree.parse('56331871.xml')
raiz = doc.getroot()
paises = doc.findall("pais")

print("""
    DATOS SOBRE IDIOMAS EN CADA PAIS

    1- España
    2- Irán
    3- Alemania
    4- EEUU
    5- Libano
    6- Madagascar
    7- Salir
    """)

valid_choices = ["1", "2", "3", "4", "5", "6"]

while True:
    eleccion = input("Introduzca un número referente a un país de la lista observable: ")

    if eleccion in valid_choices:
        index = int(eleccion) - 1
        print("")
        print(paises[index].find("nombre").text)
        idiomas = paises[index].findall("idiomas/idioma")
        for idioma in idiomas:
            print(idioma.attrib)
    elif eleccion == "7":
        print("")
        print("¡Hasta pronto!")
        break
    else:
        print("Opción no válida, elija un número del 1 al 6 para mostrar la información del país correspondiente")