Каков наилучший способ изменить текст, содержащийся в файле XML, используя Python? - PullRequest
4 голосов
/ 07 октября 2008

Допустим, у меня есть существующий тривиальный файл XML с именем 'MyData.xml', который содержит следующее:

<?xml version="1.0" encoding="utf-8" ?>
<myElement>foo</myElement>

Я хочу изменить текстовое значение 'foo' на 'bar', что приведет к следующему:

<?xml version="1.0" encoding="utf-8" ?>
<myElement>bar</myElement>

Как только я закончу, я хочу сохранить изменения.

Какой самый простой и простой способ достичь всего этого?

Ответы [ 4 ]

4 голосов
/ 07 октября 2008

Используйте Python's minidom

В основном вы будете предпринимать следующие шаги:

  1. Считывание данных XML в объект DOM
  2. Используйте методы DOM для изменения документа
  3. Сохранить новый объект DOM в новый документ XML

Спецификация python должна довольно хорошо держать вас за руку, хотя этот процесс.

3 голосов
/ 08 октября 2008

Это то, что я написал на основе @ ответа Райана :

from xml.dom.minidom import parse
import os

# create a backup of original file
new_file_name = 'MyData.xml'
old_file_name = new_file_name + "~"
os.rename(new_file_name, old_file_name)

# change text value of element
doc = parse(old_file_name)
node = doc.getElementsByTagName('myElement')
node[0].firstChild.nodeValue = 'bar'

# persist changes to new file
xml_file = open(new_file_name, "w")
doc.writexml(xml_file, encoding="utf-8")
xml_file.close()

Не уверен, что это был самый простой и простой подход, но он работает. ( @ ответ Хавьера содержит меньше строк кода, но требует нестандартной библиотеки)

3 голосов
/ 07 октября 2008

Для быстрых некритических манипуляций с XML мне действительно нравится P4X . Это давайте напишем так:

import p4x
doc = p4x.P4X (open(file).read)
doc.myElement = 'bar'
1 голос
/ 08 октября 2008

Вы также можете попробовать отличную Библиотеку связывания данных XML от Uche Ogbuji, Amara: http://uche.ogbuji.net/tech/4suite/amara

(Документация здесь: http://platea.pntic.mec.es/~jmorilla/amara/manual/)

Крутая вещь в Amara заключается в том, что он превращает документ XML в объект Python, так что вы можете просто делать такие вещи, как:

record = doc.xml_create_element(u'Record')

nameElem = doc.xml_create_element(u'Name', content=unicode(name))

record.xml_append(nameElem)

valueElem = doc.xml_create_element(u'Value', content=unicode(value))

record.xml_append(valueElem

(который создает элемент Record, содержащий элементы Name и Value (которые, в свою очередь, содержат значения переменных name и value)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...