2015-06-12 2 views
0

У меня есть большой XML-файл, структура которого примерно такова:Обновление существующего XML-документа в Python

<GROUNDTRUTH> 
    <thing fileName="1" attrib="2"> 
    <SUBSUB moreStuff="12" otherStuff="13"/> 
    </thing> 
    <thing fileName="2" attrib="2"> 
    <SUBSUB moreStuff="12" otherStuff="13"/> 
    </thing> 
    <thing fileName="3" attrib="2"> 
    <SUBSUB moreStuff="12" otherStuff="13"/> 
    </thing> 
</GROUNDTRUTH> 

Я не думаю, что я достаточно ясно, в оригинальной публикации этого вопроса. У меня есть xml-документ под названием GROUNDTRUTH, и внутри этого у меня есть несколько тысяч «вещей». Я хочу выполнить поиск по всем вещам в документе через имя файла, а затем изменить атрибут. Поэтому, если бы я искал fileName="2", я бы изменил его атрибут на attrib=x. И для некоторых thing, возможно, я бы спустился до уровня sub и изменил moreStuff.

Мой план состоит в том, чтобы хранить в файле csv имена вещей, которые мне нужно изменить, и что я хочу изменить значение атрибута. Какая функция или модуль обеспечит такую ​​функциональность? Или мне просто не хватает простого/очевидного подхода? В конечном счете, я хотел бы иметь рабочий скрипт, который возьмет файл csv с идентификатором thing и значением, которое будет обновлено, и возьмите файл xml, чтобы внести эти изменения.

Спасибо за помощь и предложения!

+0

[BeautifulSoup] (http://www.crummy.com/software/BeautifulSoup/)? – Aereaux

+0

Вы слышали о Google раньше? – hek2mgl

+1

Поиск ** [python] xml заменить атрибут ** в StackOverflow.com, и вы найдете много ответов там. –

ответ

1

Во-первых, вы можете преобразовать исходный xml-файл в выведенный XML-файл с помощью таблицы стилей xslt, которая может каким-либо образом изменять форму xml-файлов, форм или форм, таких как изменение, реструктурирование, переупорядочение атрибутов, элементов, и т. д. Заметьте, что xsl является декларативным языком специального назначения для преобразования и рендеринга XML-документов.

Затем вы можете использовать lxml библиотеку Python для запуска преобразования:

#!/usr/bin/python 
import lxml.etree as ET 

dom = ET.parse('originalfile.xml') 
xslt = ET.parse('transformfile.xsl') 
transform = ET.XSLT(xslt) 
newdom = transform(dom) 

tree_out = ET.tostring(newdom, encoding='UTF-8', pretty_print=True) 

xmlfile = open('finalfile.xml','ab') 
xmlfile.write(tree_out) 
xmlfile.close() 

Кстати, PHP, Java, C, VB, или почти любого языка, даже повседневной браузер может запускать преобразование! Чтобы запустить браузер, просто добавьте таблицу стилей в заголовке:

<?xml-stylesheet type="text/xsl" href="transformfile.xsl"?> 
Смежные вопросы