Python - Lire un fichier XML (exemple DOM)

Python - Lire un fichier XML (exemple DOM)

Dans cet exemple, nous allons vous montrer comment lire un fichier XML et imprimer ses valeurs, via Pythonxml.dom.minidom.

1. Fichier XML

Un simple fichier XML, analysé plus tard avec Pythonminidom.

staff.xml


    Mkyong Enterprise
    
        example
        100,000
    
    
        yflow
        200,000
    
    
        alex
        20,000
    

2. Exemple DOM 1

Un exemple simple de Pythonminidom.

dom-example.py

from xml.dom import minidom

doc = minidom.parse("staff.xml")

# doc.getElementsByTagName returns NodeList
name = doc.getElementsByTagName("name")[0]
print(name.firstChild.data)

staffs = doc.getElementsByTagName("staff")
for staff in staffs:
        sid = staff.getAttribute("id")
        nickname = staff.getElementsByTagName("nickname")[0]
        salary = staff.getElementsByTagName("salary")[0]
        print("id:%s, nickname:%s, salary:%s" %
              (sid, nickname.firstChild.data, salary.firstChild.data))

Sortie

Mkyong Enterprise
id:1001, nickname:example, salary:100,000
id:1002, nickname:yflow, salary:200,000
id:1003, nickname:alex, salary:20,000

3. Exemple DOM 2

Encore un autre exemple deminidom.

dom-example2.py

from xml.dom import minidom

doc = minidom.parse("staff.xml")

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("Node Name : %s" % name.nodeName)
print("Node Value : %s \n" % getNodeText(name))


staffs = doc.getElementsByTagName("staff")
for staff in staffs:
        sid = staff.getAttribute("id")
        nickname = staff.getElementsByTagName("nickname")[0]
        salary = staff.getElementsByTagName("salary")[0]
        print("id:%s, nickname:%s, salary:%s" %
              (sid, getNodeText(nickname), getNodeText(salary)))

Sortie

Node Name : name
Node Value : Mkyong Enterprise

id:1001, nickname:example, salary:100,000
id:1002, nickname:yflow, salary:200,000
id:1003, nickname:alex, salary:20,000

4. Démo du projet