El modelo de objeto de documento (DOM) es una interfaz de programación para documentos HTML y XML (lenguaje de marcado extensible). Define la estructura lógica de los documentos y la forma en que se accede y manipula un documento.
Analizar XML con API DOM en python es bastante simple. A modo de ejemplo, crearemos un documento XML de muestra (sample.xml) como se muestra a continuación:
<?xml version="1.0"?> <company> <name>GeeksForGeeks Company</name> <staff id="1"> <name>Amar Pandey</name> <salary>8.5 LPA</salary> </staff> <staff id="2"> <name>Akbhar Khan</name> <salary>6.5 LPA</salary> </staff> <staff id="3"> <name>Anthony Walter</name> <salary>3.2 LPA</salary> </staff> </company>
Ahora, analicemos el XML anterior usando python. El siguiente código demuestra el proceso,
from xml.dom import minidom doc = minidom.parse("sample.xml") # doc.getElementsByTagName returns the NodeList name = doc.getElementsByTagName("name")[0] print(name.firstChild.data) staffs = doc.getElementsByTagName("staff") for staff in staffs: staff_id = staff.getAttribute("id") name = staff.getElementsByTagName("name")[0] salary = staff.getElementsByTagName("salary")[0] print("id:% s, name:% s, salary:% s" % (staff_id, name.firstChild.data, salary.firstChild.data))
Producción:
GeeksForGeeks Company id:1, name: Amar Pandey, salary:8.5 LPA id:2, name: Akbar Khan, salary:6.5 LPA id:3, name: Anthony Walter, salary:3.2 LPA
Lo mismo también se puede hacer usando una función definida por el usuario como se muestra en el siguiente código:
from xml.dom import minidom doc = minidom.parse("sample.xml") # user-defined function def getNodeText(node): nodelist = node.childNodes result = [] for node in nodelist: if node.nodeType == node.TEXT_NODE: result.append(node.data) return ''.join(result) name = doc.getElementsByTagName("name")[0] print("Company Name : % s \n" % getNodeText(name)) staffs = doc.getElementsByTagName("staff") for staff in staffs: staff_id = staff.getAttribute("id") name = staff.getElementsByTagName("name")[0] salary = staff.getElementsByTagName("salary")[0] print("id:% s, name:% s, salary:% s" % (staff_id, getNodeText(name), getNodeText(salary)))
Producción:
Company Name : GeeksForGeeks Company id:1, name:Amar Pandey, salary:8.5 LPA id:2, name:Akbhar Khan, salary:6.5 LPA id:3, name:Anthony Walter, salary:3.2 LPA
Publicación traducida automáticamente
Artículo escrito por RajuKumar19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA