- 8. Класс ElementTree: XML-документ¶
- 8.1. ElementTree.find()¶
- 8.2. ElementTree.findall(): поиск соответствующих элементов¶
- 8.3. ElementTree.findtext(): получение текстового содержимого из элемента¶
- 8.4. ElementTree.getiterator(): создать итератор¶
- 8.5. ElementTree.getroot(): найдите корневой элемент¶
- 8.6. ElementTree.xpath(): оценить выражение XPath¶
- 8.7. ElementTree.write(): Записать обратно в XML¶
8. Класс ElementTree: XML-документ¶
После того, как вы использовали конструктор etree.ElementTree для создания XML-документа, вы можете использовать эти методы в этом экземпляре.
8.1. ElementTree.find()¶
Этот метод используется для поиска конкретного элемента в документе. Это по существу эквивалентно вызову метода .find() в корневом элементе документа; см. раздел 9.5, «Element.find(): найдите соответствующий подэлемент».
Например, если doc является экземпляром ElementTree, этот вызов:
8.2. ElementTree.findall(): поиск соответствующих элементов¶
Учитывая некоторый экземпляр ElementTree, этот метод вернет последовательность из нуля или более элементов, которые соответствуют шаблону, указанному аргументом path.
ET.findall(path[, namespaces=N])
Этот метод работает точно так же, как вызов метода .findall() в корневом элементе документа. См. Раздел 9.6, «Element.findall(): найти все соответствующие подэлементы».
8.3. ElementTree.findtext(): получение текстового содержимого из элемента¶
Чтобы извлечь текст из некоторого элемента, используйте этот метод для экземпляра ElementTree например ET:
ET.findtext(path[, default=None][, namespaces=N])
Этот метод по существу такой же, как вызов метода .findtext() в корневом элементе документа; см. раздел 9.7, «Element.findtext(): Извлечь текстовый контент».
8.4. ElementTree.getiterator(): создать итератор¶
Во многих приложениях вы захотите посетить каждый элемент документа или, возможно, получить информацию из всех тегов определенного типа. Этот метод, на некоторых экземплярах ElementTree ET, вернет итератор, который посещает все соответствующие теги.
Если вы опустите аргумент, вы получите итератор, который генерирует каждый элемент в дереве в порядке документа.
Если вы хотите посетить только теги с определенным именем, передайте это имя в качестве аргумента.
Вот несколько примеров. В этих примерах предположим, что page — это экземпляр ElementTree, содержащий страницу XHTML. В первом примере будет напечатано каждое имя тега на странице в порядке документа.
for elt in page.getiterator(): print elt.tag
Второй пример будет рассматривать каждый элемент div на странице, а для тех, у кого есть атрибут class , он печатает эти атрибуты.
for elt in page.getiterator('div'): if elt.attrib.has_key('class'): print elt.get('class')
8.5. ElementTree.getroot(): найдите корневой элемент¶
Возвращаемое значение обычно будет экземпляром корневого элемента. Однако, если вы создали свой экземпляр ElementTree без указания корневого элемента или входного файла, этот метод вернет None.
8.6. ElementTree.xpath(): оценить выражение XPath¶
Для экземпляра ElementTree ET используйте этот вызов метода для оценки выражения XPath s, используя корневой элемент дерева как узел контекста.
Эти методы возвращают результат выражения XPath. Общие обсуждения XPath см. В разделе 10 «Обработка XPath».
8.7. ElementTree.write(): Записать обратно в XML¶
Чтобы сериализовать (конвертировать в XML) содержимое документа, содержащегося в некотором экземпляре ElementTree, применяйте этот метод:
ET.write(file, pretty_print=False)
Вы должны указать записываемый файловый объект или имя файла, который нужно записать. Если вы установите аргумент pretty_print = True, метод попытается свернуть длинные строки и отступы XML для удобочитаемости.
Например, если у вас есть экземпляр ElementTree на странице переменных, содержащей страницу XHTML, и вы хотите записать ее в стандартный выходной поток, это заявление будет делать это:
import sys page.write(sys.stdout)