Найти - Пользователи
Полная версия: xml.dom.minidom - как добавить ноду?
Начало » Python для новичков » xml.dom.minidom - как добавить ноду?
1 2
Enchantner
Уже запарился искать. В документации написано только, как создать файл заново, но не буду же я его перезаписывать целиком.

Пытался сделать так:
import xml.dom.minidom as xmlp

dom = xmlp.Document()
dom.load("./database.xml")
users = dom.documentElement
adduser = users.createTextNode("user")
users.appendChild(adduser)
Не катит, выдает ошибку на dom.load . С dom.loadXML то же самое, та же ошибка. Как грамотно сделать и сохранить результат?
pyuser
Что-то не нашел я используемые Вами методы load и loadXML у класса Document (Node) :(
Используйте функции модуля parse и parseString соответственно
Enchantner
pyuser
Не, ну понятно, само дерево я получить-то могу:
dom = xmlp.parse(“./database.xml”)
а вот что дальше делать…
Распарсить и получить информацию легко, перезаписать файл - тоже. Но мне хочется именно добавить.

UPD: Хмм, интересно, работает вот такая схема:
dom = xmlp.parse("./database.xml")
root = dom.documentElement
elem = dom.createElement('user')
root.appendChild(elem)
Но как сохранить примененные изменения в документ - по прежнему не пойму.
pyuser
Заглядываем в исходник и буквально сразу натыкаемся на методы toxml и toprettyxml :)
Enchantner
pyuser
ага, только это влияет на структуру дерева внутри программы. Никаких изменений во внешний файл не вносится ;) В любом случае его приходится перезаписывать полностью.
pyuser
Enchantner
В любом случае его приходится перезаписывать полностью.
А Вы полагаете другие парсеры работают подругому?!
Enchantner
pyuser
То есть в любом случае надо перезаписывать весь файл?
ZAN
Лучшее, что можно сделать - открыть файл, в режиме ‘r+w’ и перезаписывать только с той позиции, где начинаются изменения (узнать позицию -> pos = f.tell(), перейти на позицию -> f.seek(pos)), иначе - никак.
Ferroman
xml - не лучший вариант для использования в качестве базы данных.
Enchantner
Ferroman
Это не мне, к счастью, это я курсовую студягам пишу :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB