Я анализирую в использовании XML
from lxml import etree
tree = etree.parse('test.xml', etree.XMLParser())
Теперь я хочу работать над проанализированным XML. Я испытываю затруднения при удалении элементов с пространствами имен или просто элементов в целом такой как
<rdf:description><dc:title>Example</dc:title></rdf:description>
и я хочу удалить тот весь элемент, а также все в тегах. Я также хочу добавить атрибуты к существующим элементам также. Методы, в которых я нуждаюсь, находятся в Element
класс, но я понятия не имею, как использовать это с ElementTree
возразите здесь. Любые указатели определенно ценились бы, спасибо
Вы можете добраться до корневого элемента через этот вызов: root=tree.getroot()
Используя этот корневой элемент, вы можете использовать findall()
и удалить элементы, которые соответствуют вашим критериям:
deleteThese = root.findall("title")
for element in deleteThese: root.remove(element)
Наконец, вы можете посмотреть, как выглядит ваше новое дерево с помощью этого: etree.tostring(root, pretty_print=True)
Вот некоторая информация о том, как работают find/findall: http://infohost.nmt.edu/tcc/help/pubs/pylxml/class-ElementTree.html#ElementTree-find
Чтобы добавить атрибут к элементу, попробуйте сделать что-то вроде этого:
root.attrib['myNewAttribute']='hello world'
Метод remove
должен делать то, что вы хотите:
>>> from lxml import etree
>>> from StringIO import StringIO
>>> s = '<Root><Description><Title>foo</Title></Description></Root>'
>>> tree = etree.parse(StringIO(s))
>>> print(etree.tostring(tree.getroot()))
<Root><Description><Title>foo</Title></Description></Root>
>>> title = tree.find('//Title')
>>> title.getparent().remove(title)
>>> etree.tostring(tree.getroot())
'<Root><Description/></Root>'
>>> print(etree.tostring(tree.getroot()))
<Root><Description/></Root>