Редактировать HTML-документ
Пространство имен DOM
Aspose.HTML for Python via .NET позволяет вам получать доступ к HTML DOM (объектной модели документа) и манипулировать ею на языке Python. Пространство имен aspose.html.dom предоставляет API для взаимодействия с документами HTML, XML и SVG. Он представляет документ как дерево узлов, где каждый узел представляет часть документа, например элемент, текстовую строку или комментарий. Пространство имен включает в себя такие классы, как Attr, CharacterData, Comment и другие, каждый из которых служит определенным целям в модели документа.
Класс Document представляет весь документ HTML, XML или SVG и служит корнем дерева документов. Другие классы, такие как Element, Node, DocumentFragment и EventTarget, предоставляют доступ к различным частям документа и позволяют манипулировать данными документа и взаимодействовать с ними. API основан на стандарте WHATWG DOM. Таким образом, легко использовать Aspose.HTML for Python via .NET, имея базовые знания языков HTML и JavaScript.
Редактировать HTML
Чтобы редактировать HTML-документ с помощью дерева DOM, используйте класс HTMLDocument, который представляет весь документ. Существует множество способов редактирования HTML с помощью нашей библиотеки Python. Вы можете изменить документ, вставив новые узлы, удалив или отредактировав содержимое существующих узлов. Если вам нужно создать новый элемент или узел, необходимо вызвать следующие методы:
- create_element(
local_name) для создания новых элементов, таких как<style>и<p>; - get_elements_by_tag_name(
tagname) для получения списка существующих элементов данного тэга; - get_element_by_id(
element_id) для возврата первого элемента с указанным атрибутом ID с заданным значением; - create_text_node(
data) для добавления текстового контента.
Для управления атрибутами элемента используйте методы:
- set_attribute(
qualified_name, value) добавляет новый атрибут и устанавливает его значение. Если атрибут с таким именем уже присутствует в элементе, его значение меняется на значение параметра value; - get_attribute(
qualified_name) извлекает значение атрибута по имени.
После создания новых узлов в DOM есть несколько методов, которые помогут вам вставить узлы в дерево документа. В следующем списке описан наиболее распространенный способ вставки или удаления узлов:
- Метод
append_child(
node) используется для добавления элементов или узлов к существующим элементам; - Метод
insert_before(
node, child) вставляетnodeперед существующим дочерним узломchild. Еслиchildимеет значение null,nodeвставляется в конец списка дочерних элементов. - Метод remove() удаляет этот экземпляр из дерева HTML DOM.
- Метод
remove_child(
child) удаляет дочерний узел из списка дочерних узлов.
Полный список классов и методов, представленных в пространстве имен DOM, можно найти на странице Справочник API.
Редактировать дерево документа
Python API Aspose.HTML поддерживает набор HTML-элементов, определенных в стандарте HTML, а также правила вложения элементов. Рассмотрим простые шаги по созданию HTML с нуля и его редактированию с помощью DOM-дерева и упомянутого выше функционала. Документ будет содержать текстовый абзац с атрибутом id:
- Используйте конструктор HTMLDocument() для создания экземпляра HTML-документа.
- Свойство body класса
HTMLDocument указывает на элемент
<body>документа. - Используйте метод
create_element() класса
HTMLDocument, чтобы создать элемент абзаца<p>. - Используйте метод
set_attribute(), чтобы установить атрибут
idдля элемента абзаца. - Создайте текстовый узел с помощью метода create_text_node().
- Добавьте этот текстовый узел к элементу абзаца, используя метод append_child().
- Добавьте элемент абзаца в
<body>документа, используя методappend_child(). - Сохраните HTML-документ в файл.
Этот код демонстрирует, как программно создать базовый HTML-документ, добавить абзац с атрибутом и текстом и сохранить полученный HTML-код в файл:
1# Edit HTML document using DOM Tree in Python
2
3import os
4import aspose.html as ah
5
6# Define the output directory and file path
7output_dir = "output/"
8output_path = os.path.join(output_dir, "edit-document-tree.html")
9
10# Ensure the output directory exists
11os.makedirs(output_dir, exist_ok=True)
12
13# Create an instance of an HTML document
14document = ah.HTMLDocument()
15
16# Access the document <body> element
17body = document.body
18
19# Create a paragraph element <p>
20p = document.create_element("p")
21
22# Set a custom attribute
23p.set_attribute("id", "my-paragraph")
24
25# Create a text node
26text = document.create_text_node("The Aspose.Html.Dom namespace provides an API for representing and interfacing with HTML, XML, or SVG documents.")
27
28# Add the text to the paragraph
29p.append_child(text)
30
31# Attach the paragraph to the document body
32body.append_child(p)
33
34# Save the HTML document to a file
35document.save(output_path)Давайте посмотрим на создание более сложного HTML-документа. В следующем фрагменте кода мы создадим HTML-документ с нуля, создадим новые элементы, наполним их содержимым и добавим их в структуру HTML-документа. В этом нам поможет модель HTML DOM и упомянутый выше функционал.
- Используйте конструктор HTMLDocument() для инициализации нового объекта HTMLDocument, который представляет HTML-документ.
- Используйте метод
create_element() класса
HTMLDocumentдля создания элемента<style>. - Назначьте правила CSS элементу стиля с помощью свойства text_content.
- Получите элемент
<head>с помощью метода get_elements_by_tag_name(). - Добавьте элемент
<style>к элементу<head>с помощью метода append_child(). - Используйте метод
create_element() для создания элемента абзаца
<p>. - Установите свойство class_name абзаца, чтобы применить нужные стили CSS.
- Создайте текстовый узел с помощью метода create_text_node().
- Добавьте этот текстовый узел к элементу абзаца, используя метод
append_child(). - Добавьте элемент абзаца в
<body>документа, используя методappend_child()в свойствеbody. - Вызовите метод save() класса HTMLDocument, чтобы сохранить документ по указанному пути к файлу HTML.
1# Create and add new HTML elements using Python
2
3import os
4import aspose.html as ah
5
6# Define output directory and file paths
7output_dir = "output/"
8save_path = os.path.join(output_dir, "edit-document.html")
9
10# Ensure the output directory exists
11os.makedirs(output_dir, exist_ok=True)
12
13# Create an instance of an HTML document
14document = ah.HTMLDocument()
15
16# Create a style element and set the teal color for elements with class "col"
17style = document.create_element("style")
18style.text_content = ".col { color: teal }"
19
20# Find the document <head> element and append the <style> element
21head = document.get_elements_by_tag_name("head")[0]
22head.append_child(style)
23
24# Create a paragraph <p> element with class "col"
25p = document.create_element("p")
26p.class_name = "col"
27
28# Create a text node
29text = document.create_text_node("Edit HTML document")
30
31# Append the text node to the paragraph
32p.append_child(text)
33
34# Append the paragraph to the document <body>
35document.body.append_child(p)
36
37# Save the HTML document to a file
38document.save(save_path)Справочник API предоставляет полный список классов и методов в пространстве имен DOM.
Использование свойств inner_html и outer_html
Работа с объектами DOM предоставляет мощный способ манипулирования HTML-документом на Python. Однако в некоторых случаях удобнее работать напрямую со строками. Свойства inner_html и outer_html используются для доступа к содержимому HTML в документе и управления им, но они различаются тем, что они представляют и как они используются:
- Свойство inner_html представляет содержимое HTML внутри элемента, исключая собственные начальный и конечный теги элемента.
- Свойство outer_html представляет все HTML-содержимое элемента, включая его собственные начальный и конечный теги.
В следующем фрагменте кода показано, как использовать свойства inner_html и outer_html класса
Element для редактирования HTML.
1# Edit HTML body content and get modified document as a string using Python
2
3import aspose.html as ah
4
5# Create an instance of an HTML document
6document = ah.HTMLDocument()
7
8# Write the content of the HTML document to the console
9print(document.document_element.outer_html) # output: <html><head></head><body></body></html>
10
11# Set the content of the body element
12document.body.inner_html = "<p>HTML is the standard markup language for Web pages.</p>"
13
14# Find the document <p> element
15p = document.get_elements_by_tag_name("p")[0]
16
17# Write the updated content of the HTML document to the console
18print(p.inner_html) # output: HTML is the standard markup language for Web pages.
19
20# Write the updated content of the HTML document to the console
21print(document.document_element.outer_html) # output: <html><head></head><body><p>HTML is the standard markup language for Web pages.</p></body></html>Редактировать CSS
Каскадные таблицы стилей (CSS) – это язык таблиц стилей, используемый для описания того, как веб-страницы отображаются в браузере. CSS можно добавлять в HTML-документы встроенным, внутренним и внешним способом. Таким образом, вы можете определить уникальный стиль для одного элемента HTML, используя встроенный CSS, или для нескольких веб-страниц, чтобы использовать общее форматирование, указав соответствующий CSS в отдельном файле .css. Aspose.HTML for Python via .NET не только поддерживает CSS «из коробки», но также предоставляет инструменты для управления стилями документа «на лету» перед преобразованием HTML-документа в другие форматы, как показано ниже.
Встроенный CSS
Когда CSS написан с использованием атрибута style внутри тега HTML, он называется «встроенным CSS». Встроенный CSS позволяет применять индивидуальный стиль к одному элементу HTML за раз. Вы устанавливаете CSS для элемента HTML, используя атрибут style с любыми свойствами CSS, определенными в нем.
В следующем фрагменте кода вы можете увидеть, как указать свойства стиля CSS для элемента HTML <p>.
1# How to set inline CSS styles in an HTML element using Python
2
3import os
4import aspose.html as ah
5import aspose.html.rendering.pdf as rp
6
7# Define the content of the HTML document
8content = "<p>Edit inline CSS using Aspose.HTML for Python via .NET</p>"
9
10# Create an instance of an HTML document with specified content
11document = ah.HTMLDocument(content, ".")
12
13# Find the paragraph element and set a style attribute
14paragraph = document.get_elements_by_tag_name("p")[0]
15paragraph.set_attribute("style", "font-size: 150%; font-family: arial; color: teal")
16
17# Save the HTML document to a file
18output_dir = "output/"
19os.makedirs(output_dir, exist_ok=True)
20html_path = os.path.join(output_dir, "edit-inline-css.html")
21document.save(html_path)
22
23# Create an instance of the PDF output device and render the document to this device
24pdf_path = os.path.join(output_dir, "edit-inline-css.pdf")
25with rp.PdfDevice(pdf_path) as device:
26 document.render_to(device)В этом конкретном примере цвет, размер шрифта и семейство шрифтов применяются к элементу <p>. Фрагмент отрендеренной pdf-страницы выглядит следующим образом:

Внутренний CSS
Опция внутреннего стиля CSS популярна для применения свойств к отдельным страницам путем заключения всех стилей в элемент <style>, помещающий его в <head> HTML-документов.
1# Edit HTML with internal CSS using Python
2
3import os
4import aspose.html as ah
5import aspose.html.rendering.pdf as rp
6
7
8# Define the content of the HTML document
9content = "<div><h1>Internal CSS</h1><p>An internal CSS is used to define a style for a single HTML page</p></div>"
10
11# Create an instance of an HTML document with specified content
12document = ah.HTMLDocument(content, ".")
13
14# Create a <style> element and define internal CSS rules
15style = document.create_element("style")
16style.text_content = (
17 ".frame1 { margin-top:50px; margin-left:50px; padding:25px; width:360px; height:90px; "
18 "background-color:#82011a; font-family:arial; color:#fff5ee;} \r\n"
19 ".frame2 { margin-top:-70px; margin-left:160px; text-align:center; padding:20px; width:360px; "
20 "height:100px; background-color:#ebd2d7;}"
21)
22
23# Find the <head> element and append the style element
24head = document.get_elements_by_tag_name("head")[0]
25head.append_child(style)
26
27# Find the first paragraph element and apply styles
28header = document.get_elements_by_tag_name("h1")[0]
29header.class_name = "frame1"
30
31# Update the style using the style attribute directly
32header.set_attribute("style", "font-size: 200%; text-align: center;")
33
34# Find the last paragraph element and apply styles
35paragraph = document.get_elements_by_tag_name("p")[0]
36paragraph.class_name = "frame2"
37paragraph.set_attribute("style", "color: #434343; font-size: 150%; font-family: verdana;")
38
39# Save the HTML document to a file
40output_dir = "output/"
41os.makedirs(output_dir, exist_ok=True)
42html_path = os.path.join(output_dir, "edit-internal-css.html")
43document.save(html_path)
44
45# Create an instance of the PDF output device and render the document to this device
46pdf_path = os.path.join(output_dir, "edit-internal-css.pdf")
47with rp.PdfDevice(pdf_path) as device:
48 document.render_to(device)В этом примере мы используем внутренний CSS, а также объявляем дополнительные свойства стиля для отдельных элементов, используя атрибут style внутри тегов <h1> и <p>. На рисунке показан фрагмент отрисованного файла edit-internal-css.pdf:

Загрузите библиотеку Aspose.HTML for Python via .NET, чтобы успешно, быстро и легко манипулировать вашими HTML-документами. Библиотека Python может создавать, изменять, извлекать данные, конвертировать и отображать HTML-документы без необходимости использования внешнего программного обеспечения. Она поддерживает популярные форматы файлов, такие как EPUB, MHTML, XML, SVG и Markdown, а также может выполнять рендеринг в форматах файлов PDF, DOCX, XPS и изображений.