Получение дерева DOM XML-документа

Только для разработки то, что сказали другие несколько классов CSS объединены в единственной строке, разграниченной пробелами. Таким образом, если бы Вы хотели к твердому коду это, то это было бы просто похоже на это:

<div class="someClass otherClass yetAnotherClass">
      <img ... id="image1" name="image1" />
</div>

Оттуда можно легко получить JavaScript, необходимый, чтобы добавить, что новый класс... просто добавляет пространство, сопровождаемое новым классом к свойству имени класса элемента. Зная это, можно также записать, что функция для удаления класса позже должна потребность возникать.

5
задан Andrew Keeton 18 August 2009 в 16:20
поделиться

3 ответа

Лично я бы по возможности начал с elementtree (предпочтительно с реализации C, которая поставляется со стандартной библиотекой Python, или с реализации lxml , но это, по сути, вопрос только более высокой скорости). Это не совместимая со стандартами модель DOM, но она содержит ту же информацию в более питоническом и удобном виде. Вы можете начать с вызова xml.etree.ElementTree.parse , который принимает источник XML и возвращает дерево элементов; сделайте это в обоих источниках, используйте getroot для каждого дерева элементов, чтобы получить его корневой элемент, затем рекурсивно сравните элементы, начиная с корневых.

Дочерние элементы элемента образуют последовательность в дереве элементов точно так же, как в стандартном DOM это означает, что их порядок считается важным; но это' Из них легко сделать наборы Python (или, приложив немного больше усилий, какие-то «мульти-наборы», если в вашем сценарии использования важны повторения, а порядок - нет) для более слабого сравнения. Еще проще использовать атрибуты для данного элемента, где гарантируется уникальность и порядок семантически не имеет значения.

Есть ли какая-то конкретная причина, по которой вам нужен стандартный DOM, а не альтернативный контейнер, такой как дерево элементов, или вы просто используете термин DOM в общем смысле, чтобы дерево элементов было в порядке?

В прошлом у меня также были хорошие результаты, используя PyRXP , который использует еще более резкое и простое представление, чем ElementTree. Однако это БЫЛО много лет назад; У меня нет недавнего опыта сравнения PyRXP с lxml или cElementTree.

если в вашем случае важны повторы, хотя порядок - нет) для более слабого сравнения. Еще проще использовать атрибуты для данного элемента, где гарантируется уникальность и порядок семантически не имеет значения.

Есть ли какая-то конкретная причина, по которой вам нужен стандартный DOM, а не альтернативный контейнер, такой как дерево элементов, или вы просто используете термин DOM в общем смысле, чтобы дерево элементов было в порядке?

В прошлом у меня также были хорошие результаты, используя PyRXP , который использует еще более резкое и простое представление, чем ElementTree. Однако это БЫЛО много лет назад; У меня нет недавнего опыта сравнения PyRXP с lxml или cElementTree.

если в вашем случае важны повторы, хотя порядок - нет) для более слабого сравнения. Еще проще использовать атрибуты для данного элемента, где гарантируется уникальность и порядок семантически не имеет значения.

Есть ли какая-то конкретная причина, по которой вам нужен стандартный DOM, а не альтернативный контейнер, такой как дерево элементов, или вы просто используете термин DOM в общем смысле, чтобы дерево элементов было в порядке?

В прошлом у меня также были хорошие результаты, используя PyRXP , который использует еще более резкое и простое представление, чем ElementTree. Однако это БЫЛО много лет назад; У меня нет недавнего опыта сравнения PyRXP с lxml или cElementTree.

где гарантируется уникальность и порядок семантически не имеет значения.

Есть ли какая-то конкретная причина, по которой вам нужен стандартный DOM, а не альтернативный контейнер, такой как дерево элементов, или вы просто используете термин DOM в общем смысле, чтобы дерево элементов было бы нормально?

В прошлом у меня также были хорошие результаты при использовании PyRXP , который использует еще более резкое и простое представление, чем ElementTree. Однако это БЫЛО много лет назад; У меня нет недавнего опыта сравнения PyRXP с lxml или cElementTree.

где гарантируется уникальность и порядок семантически не важен.

Есть ли какая-то конкретная причина, по которой вам нужен стандартный DOM, а не альтернативный контейнер, такой как дерево элементов, или вы просто используете термин DOM в общем смысле, чтобы дерево элементов было бы хорошо?

В прошлом у меня также были хорошие результаты при использовании PyRXP , который использует еще более резкое и простое представление, чем ElementTree. Однако это БЫЛО много лет назад; У меня нет недавнего опыта сравнения PyRXP с lxml или cElementTree.

У ve также были хорошие результаты при использовании PyRXP , который использует еще более резкое и простое представление, чем ElementTree. Однако это БЫЛО много лет назад; У меня нет недавнего опыта сравнения PyRXP с lxml или cElementTree.

У ve также были хорошие результаты при использовании PyRXP , который использует еще более резкое и простое представление, чем ElementTree. Однако это БЫЛО много лет назад; У меня нет недавнего опыта сравнения PyRXP с lxml или cElementTree.

2
ответ дан 15 December 2019 в 06:32
поделиться

Некоторые решения для размышлений:

1
ответ дан 15 December 2019 в 06:32
поделиться

Для сравнения экземпляров XML-документа простое сравнение проанализированных деревьев DOM не сработает. Возможно, вам потребуется реализовать свой собственный NodeComperator, который рекурсивно сравнивает узел и его дочерние узлы с каким-либо другим узлом и его дочерними узлами на основе ваших конкретных критериев, таких как:

  • Когда важен порядок дочерних элементов?
  • ] Когда важны пробелы в текстовом содержимом?
  • Существуют ли значения по умолчанию для некоторых элементов и применяются ли они вашим синтаксическим анализатором?
  • Следует ли расширять ссылки на сущности для сравнения

Minidom - хорошая отправная точка для разбора файлов и прост в использовании. Однако фактическая реализация функции сравнения для вашего конкретного приложения должна выполняться вами.

0
ответ дан 15 December 2019 в 06:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: