ffets, je crois que tu dois un cafe a pierjean, il t'a fait tout le travail.
ffets, je crois que tu dois un cafe a pierjean, il t'a fait tout le travail.
Merci pour les réponses. Merci pierjean pour l'exemple.
Malheureusement, j'ai codé l'algorithme de la fonction principale de recherche de texte dans mon programme et donc je n'ai pas trop le temps de tout repenser pour modifier cette fonction.
Je regarderai ton code à titre de culture générale quand même car j'n'ai pas eu les capacités pour le faire donc apprendre c'est toujours bon.
Pour ma part j'ai tout fait avec des fonctions de traitement de texte.
Mille mercis en tout cas.
Bonne journée à tous.
@++
ffets
Bonjour a tous,
J'ai suivi ce post avec beaucoup d'interet car je suis aussi en train de manipuler de l'XML (provenant de word) pour rajouter des infos.
J'ai utilisé ElementTree comme parseur et je le trouve tres bien.
J'arrive donc à parser mon fichier d'entrée mais lorsque je rajoute des noeuds, je n'arrive pas à ecrire l'arbre dans mon fichier de sortie !
Est ce que quelqu'un à une idée ?
Merci.
PS: voila mon code
et l'erreur:
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 from xml.etree.ElementTree import (Element, parse, SubElement, dump, ElementTree, tostring) inputFileName = "toto.xml" outDir = "./" outputFileName = "totoout.xml" # PARSING tree = parse(inputFileName) root = tree.getroot() # PROCESSING element_to_add = Element("wx:sub-section") for node in root: if node.tag == "{http://schemas.microsoft.com/office/word/2003/wordml}body": bodyNode = node childrenList = bodyNode.getchildren() el = SubElement(childrenList[len(childrenList)-1], element_to_add) # OUTPUT WRITTING # write output file file = open(os.path.join (outDir, outputFileName), "w") tree.write(file) file.close()
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 File "./apa//apa.py", line 156, in <module> main () File "./apa//apa.py", line 133, in main tree.write(file) File "C:\Program Files\Python25\lib\xml\etree\ElementTree.py", line 663, in write self._write(file, self._root, encoding, {}) File "C:\Program Files\Python25\lib\xml\etree\ElementTree.py", line 707, in _write self._write(file, n, encoding, namespaces) File "C:\Program Files\Python25\lib\xml\etree\ElementTree.py", line 707, in _write self._write(file, n, encoding, namespaces) File "C:\Program Files\Python25\lib\xml\etree\ElementTree.py", line 707, in _write self._write(file, n, encoding, namespaces) File "C:\Program Files\Python25\lib\xml\etree\ElementTree.py", line 681, in _write file.write("<" + _encode(tag, encoding)) TypeError: cannot concatenate 'str' and 'instance' objects
element_to_add doit etre une chaine, et non un objet Element.
Code : Sélectionner tout - Visualiser dans une fenêtre à part TypeError: cannot concatenate 'str' and 'instance' objects
ou bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part el = SubElement(childrenList[len(childrenList)-1],"wx:sub-section" )
Code : Sélectionner tout - Visualiser dans une fenêtre à part childrenList[len(childrenList)-1].append(element_to_add)
Merci pierjean.
Cela marche beaucoup mieux comme ca.
Bonjour à tous !
Je suis bloqué avec mon parser xml ElementTree.
Je veux rajouter un noeud dans mon xml provenant de word (wordml).
Je construit donc ce nouveau noeud avec xslt qui me donne un beau fichier avec la syntaxe wordml et la, pas de soucis.
Ensuite je parse ce noeud avec elementTree:<ns2:sub-section>
<ns0:p/>...
</ns2:sub-section>
et quand je rajoute ce noeud dans mon arbre xmlword:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 xmlEl = parse("mon_fichier_provenant_de_xslt") refRoot = xmlEl.getroot()
le noeud est bien rajouté mais il me remplace le <ns2:sub-section> en <ns0:sub-section> comme si le parser python voulais reprendre l'index à 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part chapSect.append(refRoot)
Est ce que quelqu'un connait cette erreur ?
Merci.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager