Skip to main content

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.

Méthode / ExempleDonnées d'entréeDonnées de sortie

mf_get_lxml_libary()

Exemple :

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

 

--
Retourne la librairie lxml

lxml_element_get_text(xml)

Objet Element de la la librairie etreeTexte de l'objet Element donnée en paramétre

lxml_element_get_tag(xml)

Objet Element de la la librairie etreeNom de l'objet Element donnée en paramétré

lxml_element_set_text(xml,text)

Objet Element de la la librairie etree 

,Texte à mettre dans la balise

Objet Element modifié

lxml_element_set_ta(xml,tag)

Objet Element de la la librairie etree

,Nom à affecter à la balise

Objet Element modifié


Exemple : dans une action serveur

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 balise article 
MaterialInformations= xml.xpath("//MaterialInformation")
article_rcs=env['product.product'].search([('state','=','lifeserie')])
for MaterialInformation in MaterialInformations:
    for article_rc in article_rcs: 
        #  créer balise MaterialDefinition
        MaterialDefinition=etree.SubElement(MaterialInformation,'MaterialDefinition')# crée balise MaterialDefinition
        #  ID=code
        codep=etree.SubElement(MaterialDefinition,'ID')
        tools.lxml_element_set_text(codep,article_rc.code)
        #  Description=name
        codep=etree.SubElement(MaterialDefinition,'Description')
        tools.lxml_element_set_text(codep,article_rc.name)

file_content=etree.tostring(xml)
env['mf.tools'].save_file("/home/openprod/Documents/toto.xml",file_content)
#raise Warning(etree.tostring(xml))