Certains attributs XML sont dans des sous branches, et un simple « get » ne suffit pas !
Exemple d’un XML : le fichier Glawi du professeur Franck Sajous…
<?xml version="1.0" encoding="utf-8"?>
<glawi lang="fr" dateDump="2015-12-26" endParsingDate="2016-05-18_15:47:02">
<article>
<title>aiguchi</title>
<pageId>471440</pageId>
<meta>
<category>u prononcés /u/ en français</category>
<category>ch prononcés /tʃ/ en français</category>
</meta>
<text>
<etymology>
<etym>
<xml>du japonais <foreignWord lang="ja" translit="aïguchi">合口</foreignWord>.</xml>
<txt>du japonais 合口 aïguchi.</txt>
</etym>
</etymology>
<pos type="nom" lemma="1" locution="0" gender="m" number="s">
<pronunciations>
<pron>aj.gu.tʃi</pron>
</pronunciations>
<paradigm>
<inflection form="aiguchi" gracePOS="Ncms" prons="aj.gu.tʃi"/>
</paradigm>
<definitions>
<definition>
<gloss>
<xml>Monture pour une lame de <innerLink ref="tanto">tanto</innerLink> plus épurée que la monture standard buke-zukuri, où le couteau n'a pas de garde et où le <innerLink ref="sageo">sageo</innerLink> est inexistant dans la majorité des cas.</xml>
<txt>Monture pour une lame de tanto plus épurée que la monture standard buke-zukuri, où le couteau n'a pas de garde et où le sageo est inexistant dans la majorité des cas.</txt>
</gloss>
</definition>
<definition>
<gloss>
<labels>
<label type="sem" value="métonymie"/>
<label type="domain" value="armes blanches"/>
</labels>
<xml><innerLink ref="tanto#fr">Tanto</innerLink> monté en aïguchi.</xml>
<txt>Tanto monté en aïguchi.</txt>
</gloss>
</definition>
</definitions>
<subsection type="alternativeForm">
<item>aikuchi</item>
</subsection>
</pos>
</text>
</article>
<article>
<title>démerde</title>
<pageId>471482</pageId>
<meta>
<category>Termes populaires en français</category>
<category>Argot en français</category>
</meta>
<text>
<etymology>
<etym>
<labels>
<label type="other" value="déverbal sans suffixe"/>
</labels>
<xml>dans le sens de « <innerLink ref="ôter">ôter</innerLink> d'une <innerLink ref="situation">situation</innerLink> <innerLink ref="délicat">délicat</innerLink>e ».</xml>
<txt>dans le sens de « ôter d'une situation délicate ».</txt>
</etym>
</etymology>
<pos type="nom" lemma="1" locution="0" gender="f" number="s">
<pronunciations>
<pron>de.mɛʁd</pron>
</pronunciations>
<paradigm>
<inflection form="démerde" gracePOS="Ncfs" prons="de.mɛʁd"/>
<inflection form="démerdes" gracePOS="Ncfp" prons="de.mɛʁd"/>
</paradigm>
<definitions>
<definition>
<gloss>
<labels>
<label type="attitudinal" value="populaire"/>
</labels>
<xml><innerLink ref="ensemble">Ensemble</innerLink> de <innerLink ref="savoir-faire">savoir-faire</innerLink> et d'<innerLink ref="astuce">astuce</innerLink>s permettant de se <innerLink ref="tirer">tirer</innerLink> de <innerLink ref="situation">situation</innerLink>s <innerLink ref="délicate">délicate</innerLink>s.</xml>
<txt>Ensemble de savoir-faire et d'astuces permettant de se tirer de situations délicates.</txt>
</gloss>
<example>
<xml><i>C'est la <b>démerde</b> individuelle, tout le monde fait ses petites expériences sans rien dire à personne. Ça marche ou ça marche pas, si ça marche, tu continues.</i> (Geneviève Delbos et Paul Jorion, <i>La Transmission des savoirs</i>, Maison des sciences de l'homme, 1984, p. 10)</xml>
<txt>C'est la démerde individuelle, tout le monde fait ses petites expériences sans rien dire à personne. Ça marche ou ça marche pas, si ça marche, tu continues. (Geneviève Delbos et Paul Jorion, La Transmission des savoirs, Maison des sciences de l'homme, 1984, p. 10)</txt>
</example>
</definition>
<definition>
<gloss>
<labels>
<label type="sem" value="en particulier"/>
<label type="attitudinal" value="argot"/>
</labels>
<xml><innerLink ref="utilisé">Utilisé</innerLink> pour former des <innerLink ref="surnom">surnom</innerLink>s dans le <innerLink ref="milieu">milieu</innerLink>.</xml>
<txt>Utilisé pour former des surnoms dans le milieu.</txt>
</gloss>
<example>
<xml>
<i>Jojo-la-<b>démerde</b>.</i>
</xml>
<txt>Jojo-la-démerde.</txt>
</example>
</definition>
<definition>
<gloss>
<labels>
<label type="sem" value="en particulier"/>
<label type="attitudinal" value="populaire"/>
</labels>
<xml>Ensemble d'<innerLink ref="astuce">astuce</innerLink>s et <innerLink ref="combines">combines</innerLink> en <innerLink ref="marge">marge</innerLink> de la <innerLink ref="loi">loi</innerLink>.</xml>
<txt>Ensemble d'astuces et combines en marge de la loi.</txt>
</gloss>
<example>
<xml><i>Chez lui comme chez nous, il n'y a que la <b>démerde</b> et la combine qui soient vraiment efficaces.</i> (Jean-Loup Izambert, <i>Le Crédit agricole hors la loi ?</i>, 2001)</xml>
<txt>Chez lui comme chez nous, il n'y a que la démerde et la combine qui soient vraiment efficaces. (Jean-Loup Izambert, Le Crédit agricole hors la loi ?, 2001)</txt>
</example>
</definition>
</definitions>
<subsection type="semRel">
<item type="synonym">article quinze</item>
<item type="synonym">débrouille</item>
<item type="synonym">dépatouillage</item>
<item type="synonym">système D</item>
</subsection>
</pos>
<pos type="verbe" lemma="0" locution="0">
<pronunciations>
<pron>de.mɛʁd</pron>
</pronunciations>
<inflectionInfos>
<inflectedForm gracePOS="Vmip1s-" lemma="démerder"/>
<inflectedForm gracePOS="Vmip3s-" lemma="démerder"/>
<inflectedForm gracePOS="Vmsp1s-" lemma="démerder"/>
<inflectedForm gracePOS="Vmsp3s-" lemma="démerder"/>
<inflectedForm gracePOS="Vmmp2s-" lemma="démerder"/>
</inflectionInfos>
<definitions>
<definition>
<gloss>
<xml><i>Première personne du singulier de l'indicatif présent du verbe</i><innerLink ref="démerder">démerder</innerLink>.</xml>
<txt>Première personne du singulier de l'indicatif présent du verbe démerder.</txt>
</gloss>
</definition>
<definition>
<gloss>
<xml><i>Troisième personne du singulier de l'indicatif présent du verbe</i><innerLink ref="démerder">démerder</innerLink>.</xml>
<txt>Troisième personne du singulier de l'indicatif présent du verbe démerder.</txt>
</gloss>
</definition>
<definition>
<gloss>
<xml><i>Première personne du singulier du subjonctif présent du verbe</i><innerLink ref="démerder">démerder</innerLink>.</xml>
<txt>Première personne du singulier du subjonctif présent du verbe démerder.</txt>
</gloss>
</definition>
<definition>
<gloss>
<xml><i>Troisième personne du singulier du subjonctif présent du verbe</i><innerLink ref="démerder">démerder</innerLink>.</xml>
<txt>Troisième personne du singulier du subjonctif présent du verbe démerder.</txt>
</gloss>
</definition>
<definition>
<gloss>
<xml><i>Deuxième personne du singulier de l'impératif du verbe</i><innerLink ref="démerder">démerder</innerLink>.</xml>
<txt>Deuxième personne du singulier de l'impératif du verbe démerder.</txt>
</gloss>
</definition>
</definitions>
<subsection type="paronyms">
<item>de</item>
<item>merde</item>
</subsection>
</pos>
<section type="homophones">
<item>démerdent</item>
<item>démerdes</item>
</section>
</text>
</article>
</glawi>
Ici, on ne cherche pas les sous-définitions, cela fera partie d’un autre article.
Le but ?
Extraire la nature grammaticale du mot.
Ici, on ré-invente pas la roue:
# coding: utf-8
from lxml import etree
from xml.etree import ElementTree
print("debut")
"""
print("*********************************************")
tree = etree.parse("debutG.xml")
#for wiktionary in tree.xpath("/wiktionary/entry/lexeme/defs/toplevel-def/gloss"):
for wiktionary in tree.xpath("/glawi/article"):
#print("form:" +wiktionary.get("form")) #'form' = attribut de l'element 'entry'
#print("text issu de la racine : "+wiktionary.text)
children = wiktionary.getchildren()
for child in children:
ElementTree.dump(child) #affichage complet de l'arbre
# print (child.tag()) #error
print ("text compris dans child: " + child.text)
print (child.find("lexeme/defs/toplevel-def/gloss"))
"""
print("###################################")
print ("3eme test...")
print()
tree = ElementTree.parse("debutG.xml")
nb = len(tree.getroot())
print("Nombre d'élément : "+str(nb))
print("----------------------------")
for ii in range(nb):
item = tree.getroot()[ii]
# print (item)
print("Mot : "+item.find("title").text)
print("Définition: " +item.find("text/pos/definitions/definition/gloss/txt").text)
print ("Nature gram. : "+ item.find('text/pos').attrib['type'])
if item.find('text/pos').attrib['gender']=="m":
genre="masculin"
elif item.find('text/pos').attrib['gender']=="f":
genre="féminin"
print ("Genre. : "+ genre)
if item.find('text/pos').attrib['number']=="s" :
singularite = "singulier"
elif item.find('text/pos').attrib['number']=="p":
singularite = "pluriel"
print ("Pluralité : "+ singularite)
complement = list(item)
#print("Etymologie : "+complement[0].text)
print("------------------------------------------------")
print("fin")
bernie@HP-Laptop-14s-fq0xxx:~/PROJETS/ENEE$ python3 lireGlawi.py
debut
###################################
3eme test...
Nombre d'élément : 2
----------------------------
Mot : aiguchi
Définition: Monture pour une lame de tanto plus épurée que la monture standard buke-zukuri, où le couteau n'a pas de garde et où le sageo est inexistant dans la majorité des cas.
Nature gram. : nom
Genre. : masculin
Pluralité : singulier
------------------------------------------------
Mot : démerde
Définition: Ensemble de savoir-faire et d'astuces permettant de se tirer de situations délicates.
Nature gram. : nom
Genre. : féminin
Pluralité : singulier
------------------------------------------------