2009-06-11 13 views
3

Je suis en train de créer un script pour traduire des documents XML. C'est en fait assez cool, l'idée est (et ça marche) de prendre un fichier xml (ou un dossier de fichiers xml) et de l'ouvrir, analyser le xml, obtenir ce qu'il y a entre les balises et utiliser le google translate et remplacez le contenu des fichiers xml. Comme je l'ai dit, j'ai ce travail, mais seulement dans des documents au format xml assez strict, maintenant je dois le rendre compatible avec des documents formatés différemment. Mon idée était donc:Comment puis-je rechercher et remplacer en XML avec Python?

le xml Parse, trouver un nœud, par exemple:

<template>lorem lipsum dolor mit amet<think><set name="she">Ada</set></think></template> 

Enregistrer cela comme une chaîne, faites une recherche regex et remplacer sur cette chaîne. Mais je n'ai malheureusement aucune idée sur la façon de procéder. Je veux rechercher la chaîne (noeud xml) trouver le texte qui est entre les balises, dans ce cas "lorem lipsum dolor mit amet" et "Ada", appeler une fonction avec ces textes comme un paramètre, puis insérez le résultat de la fonction dans le même lieu d'où il provient.

La raison pour laquelle je ne peux pas simplement obtenir le texte et la mise en forme reconstruis xml est qu'il y aura un format différent noeuds xml donc je besoin d'être identique ...

Répondre

5

ElementTree serait un bon choix pour ce genre d'analyse. Il est facile à utiliser et léger et supporte la sortie de XML après que vous y ayez effectué des opérations (aussi simple qu'écrire write()). Il est livré avec des bibliothèques standard Python dans les dernières versions (je crois 2.6+).

7

Ne pas essayer d'analyser XML en utilisant des expressions régulières ! XML is not regular et par conséquent les expressions régulières ne sont pas adaptées pour effectuer ce type de tâche.

Utilisez un analyseur XML réel. Beaucoup d'entre eux sont facilement disponibles pour Python. Une recherche rapide m'a conduit à this SO question qui couvre comment utiliser XPath en Python.

Questions connexes