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

2024-10-01 17:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

正如您在XML代码中看到的,每个pais都有自己的idiomas和标签idioma,并且每个都有自己的属性,我无法显示。我只是一个一个的第一,但不是全部

XML:

<?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中的一个属性:

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")

它应该在每个pai上显示来自idioma的所有属性,但我不知道怎么做,所以这就是我来这里的原因


Tags: idextensionprintnombretipoidiomapaisespais
1条回答
网友
1楼 · 发布于 2024-10-01 17:41:45

你应该把“习惯用法”循环一下。请参阅下面的代码

(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")

相关问题 更多 >

    热门问题