IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs XML Discussion :

[XML] fichier plat vers xml


Sujet :

APIs XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 176
    Par défaut [XML] fichier plat vers xml
    Bonjour

    je voudrais savoir ce que je peut utiliser pour parser un fichier plat en fichier xml

    pour tout vous dire je débute avec le xml et je ne sais trops vers ou me diréger.

    merci d'avence pour votre aide

  2. #2
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    tout ce qui est transformation cvs, txt, ... vers xml j'utilise des programmes maison écrit en python.

    Donc si tu explicites ton problème: comment en construit ton txt , ... je peux te donner un coup de main pour écrire le programme qui va bien

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 176
    Par défaut merci
    Bonjour

    je serai trés heureuse de bénificier de votre aide .
    pour le détail que vous demander je ne comprend pas ce que vous voulait savoir*

    les fichiers plats sont des fichier de données organisé en réalité je peut avoir n'importe qu'el type de données l'essenciel et que je peux les transformer en un fichier xml

    pour pyton je ne sais pas programmer en ce language; mais moi je penssait que je pourrait utilisé java

  4. #4
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    En faite vous me donner déjà beaucoup de réponse:
    votre fichier plat est organisé cela veux dire que entre le caractère 1 et 10 j'ai le code client, entre 10 et 20 j'ai l'article ,... (ceci n'est qu'un exemple).

    je ne me déclare pas programmeur en java mais le code python est assez facile à lire pour pouvoir trouver l'algo.
    je vous propose un programme python qui prend en entrée votre fichier plat et un fichier xml qui décrit la structure de votre fichier plat
    flat2xml.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
     
    #!/usr/bin/python
    import os.path, os, shutil, time, string
    import sys, getopt
    from xml.dom.minidom import *
    from xml import xpath
     
    pg_version="1.9"
    pg_author="Frederic Aoustin"
    pg_contact="fraoustin@yahoo.fr"
    pg_name="flat2xml"
     
    # todo
    # not fix
    # gerer log et trace
     
    def usage():
    	print """Usage:
    %s
    %s -h --help                                  : help
    %s -v                                         : version
    %s -i FlatFile -d XmlDescriptor [-o XmlOut]   : convert file in xml
    """ % (pg_name, pg_name, pg_name, pg_name)
    	version()
     
    def version():
    	print "Version:\n%s version %s by %s(%s)" % (pg_name, pg_version, pg_author, pg_contact)
     
    def saveFile(path, content):
    	endfile = open(path,'w')
    	endfile.write(content)
    	endfile.close()
     
    def readFile(inFile):
            f=open(inFile,'r')
            contents=f.readlines()
            f.close()
            return contents
     
    def init(xmldoc):
    	if "num" in xmldoc.documentElement.attributes.keys():
    		fix = True
    		num = xmldoc.documentElement.attributes["num"].value
    	else:
    		fix = False
    		num="-1"
     
    	if "name" in xmldoc.documentElement.attributes.keys():
    		name = xmldoc.documentElement.attributes["name"].value
    	else:
    		name="root"
     
    	return fix, num, name
     
    def getAttr(node, attr, default="unknown"):
    	if attr in node.attributes.keys():
    		return node.attributes[attr].value
    	return default
     
    def createElt(xmldoc, node, desc, data, ids):
    	for n in desc.childNodes:
        		if n.nodeType == Node.ELEMENT_NODE and n.nodeName == "element":
    			xmlelt = xmldoc.createElement(n.lastChild.data)
    			mi=getAttr(n,"min","0")
    			mx=getAttr(n,"max","")
    			if mi != "" and mx != "":
    				xmlelt.appendChild(xmldoc.createTextNode(data[int(mi):int(mx)]))
    			if mi != "" and mx == "":
    				xmlelt.appendChild(xmldoc.createTextNode(data[int(mi):]))
    			if mi == "" and mx != "":
    				xmlelt.appendChild(xmldoc.createTextNode(data[:int(mx)]))
    			if mi == "" and mx == "":
    				xmlelt.appendChild(xmldoc.createTextNode(data))
    			node.appendChild(xmlelt)
    			createElt(xmldoc, xmlelt, n , data, ids)
        		if n.nodeType == Node.ELEMENT_NODE and n.nodeName == "row":
    			xmlelt = xmldoc.createElement(getAttr(n,"name","row"))
    			node.appendChild(xmlelt)
    			createElt(xmldoc, xmlelt, n , data, ids)
        		if n.nodeType == Node.ELEMENT_NODE and n.nodeName == "attr":
    			if "min" in n.attributes.keys():
    				mi=getAttr(n,"min","0")
    				mx=getAttr(n,"max","")
    				if mi != "" and mx != "":
    					d=data[int(mi):int(mx)]
    				if mi != "" and mx == "":
    					d=data[int(mi):]
    				if mi == "" and mx != "":
    					d = data[:int(mx)]
    				if mi == "" and mx == "":
    					d = data
    				node.setAttribute(n.lastChild.data,d)
    			if "fix"  in n.attributes.keys():
    				node.setAttribute(n.lastChild.data,getAttr(n,"fix","0"))
    			if "param"  in n.attributes.keys():
    				if getAttr(n,"param","0") == "id":
    					node.setAttribute(n.lastChild.data,ids)
     
    def convert(flat, xml, out=None):
    	try:
    		data = readFile(flat)
    		xmldoc = parse(xml)
    		root=xmldoc.documentElement
    		fix, num, name = init(xmldoc)
     
    		xmlout = Document()		
    		xmltag = xmlout.createElement(name)
    		xmlout.appendChild(xmltag)
     
    		for i in data:
    			i =i[:-1]
    			if fix:
    				row = xpath.Evaluate("/root/row[@id='%s']" % i[0:int(num)] , root)		
                            else:
                                    rows = xpath.Evaluate("/root/row" , root)
                                    row=[]
                                    for k in rows:
                                            if getAttr(k,"id","") ==  i[0:len(getAttr(k,"id",""))]:
                                                    row.append(k)
     
     
     
    			for j in row:
    				xmlrow = xmlout.createElement(getAttr(j, "name", "row"))	
    				xmltag.appendChild(xmlrow)
    				if fix:
                                            l = int(num)
                                    else:
                                            l = len(getAttr(j,"id",""))
                                    createElt(xmlout, xmlrow, j , i[l:], i[0:l])
     
    			if out == None:			
    				print xmlout.toxml()
    			else:
    				saveFile(out, xmlout.toxml())	
     
    	except Exception, e:
    		print "Error ", e 
     
     
     
     
     
    if __name__ == "__main__":
    	#convert(flat = "/home/fraoustin/MyProject/XML/flat_to_xml/flat_to_xml_fix.txt",xml = "/home/fraoustin/MyProject/XML/flat_to_xml/flat_to_xml_fix.xml",out = "/home/fraoustin/MyProject/XML/flat_to_xml/out.xml")
    	try:
    		i, d, o = None, None, None
            	opts, args = getopt.getopt(sys.argv[1:], "hvi:d:o:", ["help"])
    		if len(opts) == 0:
    			usage()
    			sys.exit()
        		for opt, arg in opts:
                		if opt in ("-h", "--help"):
                			usage()                     
                			sys.exit()        
                		if opt in ("-v"):      
                			version()                     
                			sys.exit()
                		if opt in ("-i"): 
    				i = arg        
                		if opt in ("-o"): 
    				o = arg        
                		if opt in ("-d"): 
    				d = arg
    		if i != None and d != None:
    			convert(flat=i, xml=d, out=o)
    		else:
    			print "Error in parameters"
    			usage() 
     
        	except getopt.GetoptError, r:
            	print "Error", r
            	usage()
     
        	except Exception,e:
            	print e
    un fichier plat d'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id111222333344444
    id2aabbbddddeeeff
    id3aaaaaaaaabbbbb
    id3aaaaaaaaaddddd
    id3aaaaaaaaaeeeee
    id3fffffffffbbbbb
    id2aabbbccddeeeff
    un fichier xml qui décrit la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?xml version="1.0" ?>
    <root num="3" name="racine">
    	<row id="id1" name="fred">
    		<attr min="0" max="2">id</attr>
    		<element min="0" max="2"><attr min="0" max="2">elt1</attr>elt1</element>
    		<element min="2" max="5">elt2</element>
    		<element min="5" max="9">elt3</element>
    		<element min="9" max="">elt4</element>
    		<row name="essai">
    			<element min="0" max="2">elt1</element>
    			<element min="2" max="5">elt2</element>
    			<element min="5" max="9">elt3</element>
    			<element min="9" max="">elt4</element>
    		</row>
    	</row>
    	<row id="id2" name="rows">
    		<attr fix="tutu">id</attr>
    		<element min="0" max="2">elt1</element>
    		<element min="2" max="5">elt2</element>
    		<element min="5" max="9">elt3</element>
    		<element min="9" max="12">elt4</element>
    		<element min="12" max="">elt5</element>
    	</row>
    	<row id="id3">
    		<attr param="id">id</attr>
    		<element min="0" max="9">elt11</element>
    		<element min="9" max="">elt2</element>
    		<element min="" max="">all</element>
    	</row>
    </root>
    et le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" ?>
    <racine><row><elt1>11</elt1><elt2>222</elt2><elt3>3333</elt3><elt4>44444</elt4></row><row><all>111222333344444</all></row><row><elt1>aa</elt1><elt2>bbb</elt2><elt3>dddd</elt3><elt4>eee</elt4><elt5>ff</elt5></row><row><all>2aabbbddddeeeff</all></row><row><elt11>aaaaaaaaa</elt11><elt2>bbbbb</elt2><all>aaaaaaaaabbbbb</all></row><row><all>3aaaaaaaaabbbbb</all></row><row><elt11>aaaaaaaaa</elt11><elt2>ddddd</elt2><all>aaaaaaaaaddddd</all></row><row><all>3aaaaaaaaaddddd</all></row><row><elt11>aaaaaaaaa</elt11><elt2>eeeee</elt2><all>aaaaaaaaaeeeee</all></row><row><all>3aaaaaaaaaeeeee</all></row><row><elt11>fffffffff</elt11><elt2>bbbbb</elt2><all>fffffffffbbbbb</all></row><row><all>3fffffffffbbbbb</all></row><row><elt1>aa</elt1><elt2>bbb</elt2><elt3>ccdd</elt3><elt4>eee</elt4><elt5>ff</elt5></row><row><all>2aabbbccddeeeff</all></row></racine>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 176
    Par défaut merci
    merci

    je vais étudier le code et je vous tiendrais au courent de l'évolution de mon travail.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 176
    Par défaut Encore un peut d'aide
    Bonjour

    Je vous serai très reconnaissante si vous pouviez m'indiquer une documentation appropriée pour pouvoir déchiffrer le code en python que vous m'avez envoyé.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fichier Excel vers XML
    Par rolandl dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 01/11/2012, 18h09
  2. XSLT - Transformation fichier plat en XML hiérarchisé
    Par AlfMan34 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/02/2010, 11h07
  3. Exporter fichier Excel vers XML
    Par ferrero dans le forum Format d'échange (XML, JSON...)
    Réponses: 12
    Dernier message: 11/05/2009, 18h01
  4. transformation fichier log vers XML
    Par natacha79 dans le forum Logging
    Réponses: 2
    Dernier message: 09/06/2006, 13h07
  5. Importation fichier plat vers Mysql
    Par xender dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/05/2006, 22h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo