2017-02-09 1 views
1

Je suis novice en python et je veux apprendre le langage python. J'ai eu du mal à trouver une solution pour modifier la chaîne après analyse dans un fichier xml.Comment modifier la chaîne après analyse dans un fichier xml?

Voici l'exemple de fichier xml:

<Celeb> 
    <artist> 
    <name>Sammy Jellin</name> 
    <age>27</age> 
    <bday>01/22/1990</bday> 
    <country>English</country> 
    <sign>Virgo</sign> 
    </artist> 
</Celeb> 

Voici le code:

def edit_f(): 
# Get the 3rd attribute 
    root = ET.parse('test_file/test_file.xml').getroot() 
    subroot = root.getchildren() 
    listchild = subroot.getchildren()[2].text 
    print(listchild) 

# Update the string for the <bday> 
    replaceStr = listchild.replace('01/22/1990', '01/22/1992') 

def main(): 
    edit_f() 

Fin

Comment puis-je mettre à jour la date? J'ai aussi essayé d'utiliser le datetime() mais pas bon.

Nous vous remercions de votre aide.

Répondre

1

J'ai ajouté le code de travail pour votre exemple avec des commentaires.

def edit_f(): 
    tree = ET.parse('test_file/test_file.xml') 
    root = tree.getroot() 
    bdays = root.findall('.//artist/bday') # note: multiple elements 
    bday = bdays[0] # assuming there is only one artist/bday element 
    bday.text = '01/22/1992' # or ever any string you need 
    tree.write('test_file/test_file.xml') # with edited bday 

Vous n'avez pas besoin datetime ici, juste assigner une chaîne que vous voulez bday.text

N.B.tree.write() va réécrire votre fichier source, et vous ne pouvez pas l'annuler. C'est beaucoup plus sûr d'écrire la sortie dans un autre fichier.

+0

Bonjour Nikolay Prokopyev, Nous vous remercions de votre aide. J'ai encore une question de plus. Comment puis-je appliquer la mise à jour "bday.text = '01/22/1992" au fichier? Actuellement, il est seulement imprimer sur le shell python.Je veux mettre à jour le changement dans le fichier xml –

+0

Je vous ai répondu en éditant ma réponse, vous devez créer un objet 'tree' distinct avant de créer l'objet' root', puis appeler 'write'. –