# Création/Manipulation de fichier XML

Les méthodes suivantes permette de créer et manipuler les fichiers XML . Cela peut par exemple servir pour exporter un fichier XML à partir de données d'Open-Prod depuis une action serveur par exemple.

<table border="1" id="bkmrk-m%C3%A9thode-donn%C3%A9es-d%27en" style="width: 100%; height: 76.3906px;"><tbody><tr style="background-color: rgb(236, 240, 241); height: 10px;"><td style="width: 34.3452%; height: 10px;">**Méthode / Exemple**</td><td style="width: 30.2683%; height: 10px;">**Données d'entrée**</td><td style="width: 35.3336%; height: 10px;">**Données de sortie**</td></tr><tr style="height: 66.3906px;"><td style="width: 34.3452%; height: 66.3906px;">**<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">mf\_get\_lxml\_libary()</span></span>**

<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Exemple :</span></span>

<span style="color: black; mso-color-alt: windowtext;">lxml = env\['mf.tools'\].mf\_get\_lxml\_libary()  
etree=lxml.etree</span>

<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"> </span></span>

</td><td style="width: 30.2683%; height: 66.3906px;">--  
</td><td style="width: 35.3336%; height: 66.3906px;">Retourne la librairie lxml  
</td></tr><tr><td style="width: 34.3452%;">**<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">lxml\_element\_get\_text(xml)</span></span>**

</td><td style="width: 30.2683%;">Objet Element de la la librairie etree</td><td style="width: 35.3336%;">Texte de l'objet Element donnée en paramétre</td></tr><tr><td style="width: 34.3452%;">**<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">lxml\_element\_get\_tag(xml)</span></span>**

</td><td style="width: 30.2683%;">Objet Element de la la librairie etree</td><td style="width: 35.3336%;">Nom de l'objet Element donnée en paramétré</td></tr><tr><td style="width: 34.3452%;">**<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">lxml\_element\_set\_text(xml,text)</span></span>**

</td><td style="width: 30.2683%;">Objet Element de la la librairie etree

,Texte à mettre dans la balise

</td><td style="width: 35.3336%;">Objet Element modifié</td></tr><tr><td style="width: 34.3452%;">**<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">lxml\_element\_set\_ta(xml,tag)</span></span>**

</td><td style="width: 30.2683%;">Objet Element de la la librairie etree

,Nom à affecter à la balise

</td><td style="width: 35.3336%;">Objet Element modifié</td></tr></tbody></table>

  
Exemple : dans une action serveur

```python
tools = env['mf.tools']
etree = tools.mf_get_lxml_libary().etree

data_xml_de_base="""<?xml version="1.0" encoding="utf-8"?>
<ProcessMaterialInformation>
	<ApplicationArea>
        <Sender>
            <LogicalID>OPP</LogicalID>
        </Sender>
        <Receiver>
            <ID>QUBES</ID>
        </Receiver>
        <CreationDateTime>2010-07-22T11:20:33</CreationDateTime>
	</ApplicationArea>
    <DataArea>
		<Process>
		</Process>
		<MaterialInformation>
			<ID>ItemsDefinition</ID>
			<Description>Material classes and material definitions for all the items</Description>
			<PublishedDate>2010-07-22T11:20:33</PublishedDate>
		</MaterialInformation>
	</DataArea>
</ProcessMaterialInformation>
"""


xml=etree.fromstring(data_xml_de_base)
#incrément auto à chaque export  : sequence code ITEM_QUBES
res=env['ir.sequence'].next_by_code('ITEM_QUBES')
BODID=etree.SubElement(xml,'BODID') # crée balise BODID dans la balise root du xml
tools.lxml_element_set_text(BODID,res) #affecte valeur texte à la balise créé

#Ajoute une balise article pour chaque produit en vie avec une sous balise id et description
MaterialInformations= xml.xpath("//MaterialInformation")
article_rcs=env['product.product'].search([('state','=','lifeserie')])
for MaterialInformation in MaterialInformations:
    for article_rc in article_rcs: 
        #  créer une sous balise MaterialDefinition dans MaterialInformation
        MaterialDefinition=etree.SubElement(MaterialInformation,'MaterialDefinition')# crée balise MaterialDefinition
        #  Créer balise ID avec la valeur -> code
        codep=etree.SubElement(MaterialDefinition,'ID')
        tools.lxml_element_set_text(codep,article_rc.code)
        #   Créer balise Description avec la valeur -> name
        codep=etree.SubElement(MaterialDefinition,'Description')
        tools.lxml_element_set_text(codep,article_rc.name)
#Récupère le contenu en texte
file_content=etree.tostring(xml)
#sauvegarde le text dans fichier sur le serveur
env['mf.tools'].save_file("/home/openprod/Documents/toto.xml",file_content)
#affiche le contenu
#raise Warning(etree.tostring(xml))

```