Редактировать HTML-документ – Java
Объектная модель документа
Объектная модель документа, или сокращенно DOM, представляет собой стандартный API для межплатформенного программирования, который помогает программистам получать доступ к частям документа и изменять их. DOM определяет структуру документа как дерево с иерархией узлов, где каждый узел представляет часть документа, например элемент, класс, тег, атрибут или текст. Например, каждая часть, такая как изображение или часть текста, называется «узлом». Дерево DOM – это то, как или с какой структурой документ представлен в памяти. Другими словами, объектная модель документа создает логическую структуру документа и определяет объекты, свойства, события и методы для доступа к ним и их изменения.
Редактировать HTML на Java
HTML DOM определяет элементы HTML как объекты, предоставляя набор свойств и методов, которые можно использовать для доступа к ним и управления ими. Каждый элемент в HTML-документе представлен узлом в дереве DOM, и каждый узел имеет собственный набор свойств и методов.
Как мы уже упоминали в статье Создание HTML-документа, реализация HTMLDocument, а также вся модель DOM основаны на стандарте WHATWG DOM. Таким образом, Aspose.HTML легко использовать, имея базовые знания языков HTML и JavaScript. DOM package представлен следующими основными типами данных:
Data type | Description |
---|---|
Document | The Document class represents the entire HTML, XML or SVG document. Conceptually, it is the root of the document tree and provides the primary access to the document’s data. |
EventTarget | The EventTarget class is implemented by all Nodes in an implementation that supports the DOM Event Model. |
Node | The Node class is the primary datatype for the entire Document Object Model. It represents a single node in the document tree. |
Element | The element type is based on node and represents a base class for HTML, XML or SVG DOM. |
Attr | The Attr class represents an attribute in an Element object. Typically the allowable values for the attribute are defined in a schema associated with the document. |
Методы DOM
HTML DOM определяет набор методов, которые можно использовать для доступа и управления всеми элементами HTML. Вы можете использовать эти методы для выполнения различных задач, таких как создание, изменение и удаление элементов, а также управление их свойствами и событиями. Ниже приведен краткий список полезных методов API, предоставляемых основными типами данных:
Method | Description |
---|---|
document.getElementById(elementId) | The method, when invoked, must return the first element whose ID is elementId and null if there is no such element otherwise. |
document.getElementsByTagName(name) | The method must return the list of elements with the given name. |
document.createElement(tagName) | The method creates the HTML element specified by tagName, or an HTMLUnknownElement if tagName isn’t recognized. |
parentNode.appendChild(node) | The method adds a node to the end of the list of children of a specified parent node. |
element.setAttribute(name, value) | Sets the value of an attribute on the specified element. |
element.getAttribute(name) | The method returns the value of a specified attribute on the element. |
element.innerHTML | Returns a fragment of markup contained within the element. |
Существует множество способов редактирования HTML с помощью нашей библиотеки. Вы можете изменить документ, вставив новые узлы, удалив или отредактировав содержимое существующих узлов. Если вам нужно создать новый узел, необходимо вызвать следующие методы:
Method | Description |
---|---|
document.CreateCDATASection(data) | Creates a CDATASection node whose value is the specified string. |
document.CreateComment(data) | Creates a Comment node given the specified string. |
document.CreateDocumentFragment() | Creates an empty DocumentFragment object. |
document.CreateElement(localName) | Creates an element of the type specified. |
document.CreateEntityReference(name) | Creates an EntityReference object. |
document.CreateProcessingInstruction(target, data) | Creates an ProcessingInstruction with the specified name and data. |
document.CreateTextNode(data) | Creates a Text node given the specified string. |
После создания новых узлов в DOM есть несколько методов, которые могут помочь вам вставить узлы в дерево. В следующем списке описывается наиболее распространенный способ вставки узлов:
Method | Description |
---|---|
node.InsertBefore(node, child) | Inserts the node before the reference child node |
node.AppendChild(node) | Adds the node to the list of children of the current node |
Чтобы удалить узел из дерева HTML DOM, используйте методы RemoveChild(child) или Remove().
Полный список интерфейсов и методов, представленных в пакете DOM, см. в API Reference Source.
Редактировать дерево документов
В следующем фрагменте кода показано, как редактировать HTML-документ с помощью DOM-дерева и упомянутого выше функционала. Рассмотрим простые шаги по созданию и редактированию HTML. Мы создаем HTML с нуля. Документ будет содержать стилизованный текстовый абзац:
- Создайте экземпляр HTML-документа с помощью конструктора HTMLDocument().
- Создайте элемент
<style>
с помощью методаcreateElement("style")
. - Вызовите метод
setTextContent()
, чтобы установить указанное текстовое содержимое в элементе стиля. Текстовое содержимое.gr { color: green }
является правилом CSS. Он нацелен на элементы с именем класса «gr» и устанавливает их цвет на зеленый. - Используйте метод
getElementsByTagName(name)
, чтобы найти элемент<head>
и добавить элемент стиля в качестве дочернего элемента к элементу заголовка. - Создайте элемент абзаца с именем класса “gr”, используя методы
createElement("p")
иsetClassName("gr")
. - Создайте текстовый узел и добавьте его как дочерний к элементу
<p>
– используйте методы createTextNode() и appendChild(). - Добавьте абзац в тело документа.
- Сохраните документ HTML в файл, используя метод
save()
.
1// Create an instance of an HTML document
2com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument();
3
4// Create a style element and assign the green color for all elements with class-name equals 'gr'.
5Element style = document.createElement("style");
6style.setTextContent(".gr { color: green }");
7
8// Find the document header element and append the style element to the header
9Element head = document.getElementsByTagName("head").get_Item(0);
10head.appendChild(style);
11
12// Create a paragraph element with class-name 'gr'.
13HTMLParagraphElement p = (HTMLParagraphElement) document.createElement("p");
14p.setClassName("gr");
15
16// Create a text node
17Text text = document.createTextNode("Hello, World! I can edit HTML documents!");
18
19// Append the text node to the paragraph
20p.appendChild(text);
21
22// Append the paragraph to the document body element
23document.getBody().appendChild(p);
24
25// Save the HTML document to a file
26document.save("using-dom.html");
Результирующий HTML-файл выглядит следующим образом:
1<html>
2 <head>
3 <style>.gr { color: green; }</style>
4 </head>
5 <body>
6 <p class="gr">Hello, World! I can edit HTML documents!</p>
7 </body>
8</html>
Методы setInnerHTML() и getOuterHTML()
Наличие объектов DOM дает вам мощный инструмент для работы с HTML-документом. Однако иногда гораздо лучше работать только с
Class String. В следующем примере показано, как создать HTML-документ с помощью библиотеки Java Aspose.HTML – установить содержимое элемента body и вывести HTML-документ на консоль с помощью методов setInnerHTML()
и getOuterHTML()
:
- Создайте экземпляр класса HTMLDocument с помощью конструктора HTMLDocument(). Он создает пустой HTML-документ.
- Чтобы вывести исходное содержимое HTML-документа на консоль, используйте метод
getOuterHTML(). Вывод будет
<html><head></head><body></body></html>
, так как изначально документ пуст. - Используйте метод
setInnerHTML() для установки содержимого элемента body: добавьте элемент HTML
<p>
с текстом “Hello, World!!” к элементу тела. - Выведите обновленное содержимое HTML-документа на консоль с помощью метода getOuterHTML(). В результате получится
<html><head></head><body><p>Hello, World!!</p></body></html>
, поскольку элемент body теперь содержит добавленный абзац.
1// Create an instance of an HTML document
2com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument();
3
4// Write the content of the HTML document into the console output
5System.out.println(document.getDocumentElement().getOuterHTML()); // output: <html><head></head><body></body></html>
6
7// Set the content of the body element
8document.getBody().setInnerHTML("<p>Hello, World!!</p>");
9
10// Write the content of the HTML document into the console output
11System.out.println(document.getDocumentElement().getOuterHTML()); // output: <html><head></head><body><p>Hello, World!!</p></body></html>
Редактировать CSS
Каскадные таблицы стилей (CSS) – это язык таблиц стилей, используемый для описания того, как веб-страницы выглядят в браузере. Aspose.HTML не только поддерживает CSS «из коробки», но также предоставляет инструменты для управления стилями документа «на лету» перед преобразованием HTML-документа в другие форматы.
Когда CSS написан с использованием атрибута стиля внутри тега HTML, это называется «Inline CSS». Встроенный CSS позволяет применять индивидуальный стиль к одному HTML-элементу за раз. Вы устанавливаете CSS для элемента HTML, используя атрибут стиля с любыми свойствами CSS, определенными в нем. В следующем фрагменте кода вы можете увидеть, как указать свойства стиля CSS для элемента HTML <p>
:
1// Create an instance of an HTML document with specified content
2String content = "<p> Inline CSS </p>";
3com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(content, ".");
4
5// Find the paragraph element to set a style attribute
6HTMLElement paragraph = (HTMLElement) document.getElementsByTagName("p").get_Item(0);
7
8// Set the style attribute
9paragraph.setAttribute("style", "font-size: 250%; font-family: verdana; color: #cd66aa");
10
11// Save the HTML document to a file
12document.save("edit-inline-css.html");
13
14// Create the instance of the PDF output device and render the document into this device
15PdfDevice device = new PdfDevice("edit-inline-css.pdf");
16document.renderTo(device);
В этом конкретном примере цвет, размер шрифта и семейство шрифтов применяются к элементу <p>
. Фрагмент отрендеренной pdf-страницы выглядит так:
Вы можете скачать полные примеры и файлы данных по адресу GitHub.