Кто-нибудь знает, как получить экземпляр DOM (дерево) XML-файла в Python. Я пытаюсь сравнить два документа XML с eachother, которые могут иметь элементы и атрибуты в другом порядке. Как мне это сделать?Получение дерева DOM документа XML
ответ
Лично, по возможности, я начинал с elementtree (желательно реализация C, поставляемая с стандартной библиотекой Python, или реализация lxml, но это важно только для более высокой скорости). Это не стандартная DOM, но содержит ту же информацию в более Pythonic и удобном способе. Вы можете начать с вызова xml.etree.ElementTree.parse
, который берет источник XML и возвращает дерево элементов; сделайте это в обоих источниках, используйте getroot
для каждого дерева элементов, чтобы получить его корневой элемент, а затем рекурсивно сравнить элементы, начиная с корневых.
Дети элемента образуют последовательность, в дереве элементов, как и в стандартном DOM, что означает, что их порядок считается важным; но из них легко сделать из них Python (или с небольшими усилиями «несколько наборов», если повторения важны в вашем случае использования, а порядок - нет) для сравнения с слабее. Это еще проще для атрибутов для данного элемента, где уникальность гарантирована, а порядок семантически не релевантен.
Есть ли какая-то конкретная причина, по которой вам нужен стандартный DOM, а не альтернативный контейнер, например дерево элементов, или вы просто используете термин DOM в общем смысле, чтобы дерево элементов было в порядке?
В прошлом у меня также были хорошие результаты, используя PyRXP, который использует четное и простое представление, чем ElementTree. Однако это было много лет назад; У меня нет недавнего опыта относительно того, как PyRXP сегодня сравнивается с lxml или cElementTree.
Для сравнения экземпляров XML документа, наивный сравнить из разбираемых DOM деревьев не будет работать. Вы, вероятно, нужно реализовать свой собственный NodeComperator рекурсивно сравнивает узел и его дочерние-узлы с каким-либо другим узлом и его дочерних-узлов на основе ваших конкретных критериев, таких как:
- Когда порядок дочерних элементов существенных ?
- Когда пробел в текстовом содержании значителен?
- Существуют ли значения по умолчанию для некоторых элементов и применяются ли они к вашему парсеру?
- объектные ссылки должны быть расширены для сравнения
Minidom является хорошей отправной точкой для разбора файлов и проста в использовании. Однако фактическая реализация функции сравнения для вашего конкретного приложения должна выполняться вами.
- 1. Получение ребенка атрибутов из документа XML с помощью элемента дерева
- 2. Условное удаление элемента из XML-дерева документа
- 3. Получение текста() объекта до дерева DOM? - Jquery
- 4. Получение строки xml из документа в Java
- 5. Получение атрибута из документа XML
- 6. Доступ к одному узлу документа XML DOM
- 7. Получить HTML содержимое из XML дерева с Dom в Android
- 8. PHP XML DOM: работа с подразделением XML-документа
- 9. PHP DOM, получить значения из XML-документа, PHP XML
- 10. Наведение узлов дерева в JTree из XML-документа с использованием DOM-парсера
- 11. Получение полного источника XML из объекта XML DOM
- 12. Не удается сделать добавление, удаление узлов в DOM XML документа
- 13. Получение данных дерева XML в perl
- 14. JQuery - Получение определенных тегов в XML-дерева
- 15. Ошибка символа документа DOM
- 16. Получение правильной информации из документа XML
- 17. Получение всех значений документа XML в JavaScript
- 18. Получение местоположения XML-документа в XQuery
- 19. Получение одного узла из документа xml C#
- 20. получение содержимого неверного документа Xml в Biztalk
- 21. Получение XML-документа из базы данных Universe
- 22. Получение информации из документа XML в VBA
- 23. Получение разных пространств имен из документа xml
- 24. Получение имени корневого узла XML-документа
- 25. DOM структура дерева
- 26. Получение значения XML-узла в Java DOM
- 27. Создания JTree с использованием разобранного XML документа
- 28. Графические элементы вне дерева DOM
- 29. Загрузка XML-документа и его отображение в виде дерева
- 30. Получение значения узла дерева DOM, но не сценариев
Я посмотрел на мини-диск и нет никакой информации в документации о том, как получить дерево DOM из проанализированного файла. Я бы хотел сравнить два дерева, чтобы порядок не имел значения. Вы знаете, как это сделать? – Dave
Мини-документация в Python 2.6 дает пример получения DOM из файла (вы после чего-то еще) из xml.dom.parseString dom1 = parse ('c: \\ temp \\ mydata.xml') # обрабатывать XML-файл по имени – Mark