HTML-Dokument erstellen – HTML in Java erstellen und laden

HTML-Dokument

Die Klasse HTMLDocument ist ein Ausgangspunkt für die Aspose.HTML for Java-Bibliothek, die es Entwicklern ermöglicht, programmatisch mit HTML-Inhalten zu arbeiten. Die Klasse HTMLDocument stellt eine HTML-Seite dar, wie sie in einem Browser gerendert wird, und dient als Wurzel des Document Object Model (DOM).

Einige HTMLDocument-Funktionen

Das HTMLDocument bietet eine speicherinterne Darstellung eines HTML-DOM und basiert vollständig auf den W3C DOM und WHATWG DOM Spezifikationen, die von vielen modernen Browsern unterstützt werden. Wenn Sie mit den Standards WHATWG DOM, WHATWG HTML und JavaScript vertraut sind, können Sie Aspose.HTML for Java ganz einfach verwenden. Andernfalls können Sie www.w3schools.com besuchen, wo Sie viele Beispiele und Tutorials zur Arbeit mit HTML-Dokumenten finden.

Ein leeres HTML-Dokument erstellen

Der folgende Codeausschnitt zeigt die Verwendung des Standardkonstruktors HTMLDocument(), um ein leeres HTML-Dokument zu erstellen und in einer Datei zu speichern.

1// Initialize an empty HTML Document
2HTMLDocument document = new HTMLDocument();
3
4// Save the document to disk
5document.save("create-empty-document.html");

Nach der Erstellung erscheint die Datei create-empty-document.html mit der anfänglichen Dokumentstruktur: Das leere Dokument enthält Elemente wie <html> <head> und <body>. Weitere Einzelheiten zum Speichern von HTML-Dateien finden Sie im Artikel HTML-Dokument speichern.

Die resultierende Dateistruktur:

1<html>
2    <head></head>
3    <body></body>
4</html>

Ein neues HTML-Dokument erstellen

Um ein Dokument von Grund auf programmatisch zu erzeugen, verwenden Sie den Konstruktor HTMLDocument() ohne Parameter, wie im obigen Codeschnipsel gezeigt. Sobald das Dokumentobjekt erstellt ist, kann es später mit HTML-Elementen gefüllt werden. Sie können das Dokument mit Inhalt füllen, indem Sie z.B. einen Textknoten erstellen und ihn in den Textkörper des Dokuments einfügen:

1// Initialize an empty HTML document
2HTMLDocument document = new HTMLDocument();
3
4// Create a text node and add it to the document
5Text text = document.createTextNode("Hello, World!");
6document.getBody().appendChild(text);
7
8// Save the document to disk
9document.save("create-new-document.html");

HTML aus einer Datei laden

Das folgende Codeschnipsel zeigt, wie man das HTMLDocument aus einer vorhandenen Datei lädt:

 1// Prepare the "load-from-file.html" file
 2try (java.io.FileWriter fileWriter = new java.io.FileWriter("load-from-file.html")) {
 3    fileWriter.write("Hello, World!");
 4}
 5
 6// Load HTML from the file
 7HTMLDocument document = new HTMLDocument("load-from-file.html");
 8
 9// Write the document content to the output stream
10System.out.println(document.getDocumentElement().getOuterHTML());

HTML von einer URL laden

Die Klasse HTMLDocument kann HTML-Inhalte von einer Webseite abrufen und laden. Im nächsten Codeschnipsel sehen Sie, wie Sie eine Webseite in HTMLDocument laden können.

Falls Sie eine falsche URL übergeben, die im Moment nicht erreichbar ist, löst die Bibliothek die DOMException mit dem speziellen Code NetworkError aus, um Sie zu informieren, dass die ausgewählte Ressource nicht gefunden werden kann.

1// Load a document from https://docs.aspose.com/html/net/creating-a-document/document.html web page
2HTMLDocument document = new HTMLDocument("https://docs.aspose.com/html/net/creating-a-document/document.html");
3
4System.out.println(document.getDocumentElement().getOuterHTML());

HTML aus HTML-Code laden

Wenn Sie einen HTML-Code als speicherinterne Class String oder Class InputStream Objekte vorbereiten, brauchen Sie diese nicht in der Datei zu speichern, sondern übergeben Ihren HTML-Code einfach an spezielle Konstruktoren. Um ein Dokument aus einem String zu erstellen, verwenden Sie den Konstruktor HTMLDocument(content, baseUri) mit dem HTML-Inhalt und einer baseUri:

1// Prepare HTML code
2String html_code = "<p>Hello, World!</p>";
3
4// Initialize a document from a string variable
5HTMLDocument document = new HTMLDocument(html_code, ".");
6
7// Save the document to disk
8document.save("create-from-string.html");

Wenn Ihr HTML-Code verknüpfte Ressourcen (Stile, Skripte, Bilder usw.) enthält, müssen Sie einen gültigen baseUrl-Parameter an den Konstruktor des Dokuments übergeben. Er wird verwendet, um den Speicherort der Ressource während des Ladens des Dokuments aufzulösen.

HTML aus einem Stream laden

Um ein HTML-Dokument aus einem Stream zu erstellen, können Sie den Konstruktor HTMLDocument(stream, string) verwenden:

1// Create a memory stream object
2String code = "<p>Hello, World! I love HTML!</p>";
3java.io.InputStream inputStream = new java.io.ByteArrayInputStream(code.getBytes());
4
5// Initialize a document from the stream variable
6HTMLDocument document = new HTMLDocument(inputStream, ".");
7
8// Save the document to disk
9document.save("load-from-stream.html");

Arbeiten mit SVG-, MHTML- und EPUB-Dokumenten

SVG-Dokument

Da Scalable Vector Graphics (SVG) ein Teil des W3C Standards ist und in HTMLDocument eingebettet werden kann, haben wir SVGDocument und alle seine Funktionen implementiert. Unsere Implementierung basiert auf der offiziellen SVG2-Spezifikation, so dass Sie SVG-Dokumente laden, lesen und manipulieren können, wie es offiziell beschrieben ist.

Da SVGDocument und HTMLDocument auf demselben WHATWG DOM Standard beruhen, sind alle Operationen wie Laden, Lesen, Bearbeiten, Konvertieren und Speichern für beide Dokumente ähnlich. Daher sind alle Beispiele, in denen Sie Manipulationen mit HTMLDocument sehen können, auch für SVGDocument anwendbar.

Das folgende Beispiel zeigt Ihnen, wie Sie das SVG-Dokument aus der speicherinternen Variablen Class String laden können:

1// Initialize an SVG document from a string object
2SVGDocument document = new SVGDocument("<svg xmlns='http://www.w3.org/2000/svg'><circle cx='50' cy='50' r='40'/></svg>", ".");
3
4// Write the document content to the output stream
5System.out.println(document.getDocumentElement().getOuterHTML());

MHTML-Dokument

MHTML (MIME encapsulation of aggregate HTML documents) ist ein spezielles Format zur Erstellung von Webseitenarchiven. Die Aspose.HTML for Java-Bibliothek unterstützt MHTML, aber ihre Funktionalität ist derzeit auf Konvertierungs- und Rendering-Operationen von MHTML in andere unterstützte Ausgabeformate beschränkt. Weitere Informationen finden Sie in dem Artikel Konvertierung zwischen Formaten.

EPUB-Dokument

EPUB, ein elektronisches Publikationsformat, das häufig für eBooks verwendet wird, unterliegt in der Aspose.HTML for Java-Bibliothek ähnlichen Einschränkungen wie MHTML. Die Bibliothek unterstützt nur Rendering-Operationen von EPUB in unterstützte Ausgabeformate. Weitere Einzelheiten finden Sie im Artikel Konvertierung zwischen Formaten.

Asynchrone Vorgänge

Wir wissen, dass das Laden eines Dokuments ein ressourcenintensiver Vorgang sein kann, da nicht nur das Dokument selbst, sondern auch alle verknüpften Ressourcen geladen und alle Skripte verarbeitet werden müssen. In den folgenden Codeschnipseln zeigen wir Ihnen daher, wie Sie asynchrone Operationen verwenden und HTMLDocument laden können, ohne den Hauptthread zu blockieren:

 1// Create an instance of the HTMLDocument class
 2HTMLDocument document = new HTMLDocument();
 3
 4// Create a string variable for OuterHTML property reading
 5StringBuilder outerHTML = new StringBuilder();
 6
 7// Subscribe to 'ReadyStateChange' event
 8// This event will be fired during the document loading process
 9document.OnReadyStateChange.add(new DOMEventHandler() {
10    @Override
11    public void invoke(Object sender, Event e) {
12        // Check the value of the 'ReadyState' property
13        // This property is representing the status of the document. For detail information please visit https://www.w3schools.com/jsref/prop_doc_readystate.asp
14        if (document.getReadyState().equals("complete")) {
15            // Fill the outerHTML variable by value of loaded document
16            outerHTML.append(document.getDocumentElement().getOuterHTML());
17        }
18    }
19});
20
21Thread.sleep(5000);
22
23System.out.println("outerHTML = " + outerHTML);

ReadyStateChange ist nicht das einzige Ereignis, mit dem ein asynchroner Ladevorgang abgewickelt werden kann. Sie können auch das Ereignis Load abonnieren, wie im Folgenden beschrieben:

 1// Create an instance of the HTMLDocument class
 2HTMLDocument document = new HTMLDocument();
 3
 4// Subscribe to the 'ReadyStateChange' event. This event will be fired during the document loading process
 5document.OnReadyStateChange.add(new DOMEventHandler() {
 6    @Override
 7    public void invoke(Object sender, Event e) {
 8        // Check the value of 'ReadyState' property
 9        // This property is representing the status of the document. For detail information please visit https://www.w3schools.com/jsref/prop_doc_readystate.asp
10        if (document.getReadyState().equals("complete")) {
11            System.out.println(document.getDocumentElement().getOuterHTML());
12            notifyAll();
13        }
14    }
15});
16
17// Navigate asynchronously at the specified Uri
18document.navigate("https://html.spec.whatwg.org/multipage/introduction.html");
19
20synchronized (this) {
21    wait(10000);
22}

Das folgende Java Code Beispiel verwendet die HTMLDocumentWaiter Klasse im Zusammenhang mit der asynchronen Arbeit mit HTML Dokumenten in der Aspose.HTML for Java Bibliothek. Die Klasse HTMLDocumentWaiter bietet Konstruktoren und Methoden, die den asynchronen Ladevorgang in einem separaten Thread ausführen und warten, bis entweder das Laden beendet ist oder der aktuelle Thread unterbrochen wird. Schauen wir uns an, was der Code macht:

 1public class HTMLDocumentWaiter implements Runnable {
 2
 3    private final HTMLDocumentAsynchronouslyOnLoad html;
 4
 5    public HTMLDocumentWaiter(HTMLDocumentAsynchronouslyOnLoad html) throws Exception {
 6        this.html = html;
 7        this.html.execute();
 8    }
 9
10    @Override
11    public void run() {
12        System.out.println("Current Thread: " + Thread.currentThread().getName() + "; " + Thread.currentThread().getId());
13
14        while (!Thread.currentThread().isInterrupted() && html.getMsg() == null) {
15            try {
16                Thread.sleep(60000);
17            } catch (InterruptedException e) {
18                throw new RuntimeException(e);
19            }
20        }
21        Thread.currentThread().interrupt();
22    }
23}

Der folgende Codeschnipsel beschreibt die Klasse SimpleWait, die die Methode main() enthält, die als Einstiegspunkt für eine Java-Anwendung dient. Innerhalb der Methode main() wird eine html-Instanz der Klasse Examples_Java_WorkingWithDocuments_CreatingADocument_HTMLDocumentAsynchronouslyOnLoad erzeugt. Sie ist für das asynchrone Laden des HTML-Dokuments zuständig und erstellt ein HTMLDocumentWaiter-Objekt, das auf den Abschluss des Ladevorgangs wartet. Schließlich wird ein neuer Thread gestartet, um den Warteprozess auszuführen:

 1// Create an instance of the HTMLDocument class
 2HTMLDocument document = new HTMLDocument();
 3
 4// Subscribe to the 'OnLoad' event. This event will be fired once the document is fully loaded
 5document.OnLoad.add(new DOMEventHandler() {
 6    @Override
 7    public void invoke(Object sender, Event e) {
 8        msg = document.getDocumentElement().getOuterHTML();
 9        System.out.println(msg);
10    }
11});
12
13// Navigate asynchronously at the specified Uri
14document.navigate("https://html.spec.whatwg.org/multipage/introduction.html");
Example_SimpleWait hosted with ❤ by GitHub

Schlussfolgerungen

  1. Umfassende DOM-Manipulation: Die Klasse HTMLDocument bietet eine robuste und standardkonforme Möglichkeit, HTML-Dokumente programmatisch zu erstellen, zu verändern und zu manipulieren, gemäß den Spezifikationen des W3C und der WHATWG.

  2. Flexible Dokumentenerstellung und -ladung: Mithilfe von Konstruktoren können Entwickler Dokumente von Grund auf neu erstellen, HTML aus einer Vielzahl von Quellen (Dateien, URLs, Streams) laden oder Inhalte dynamisch generieren.

  3. Erweiterte Unterstützung von Operationen: Funktionen wie asynchrones Laden und Ereignisbehandlung ermöglichen die nahtlose Integration ressourcenintensiver Vorgänge, ohne den Hauptanwendungsthread zu blockieren.

  4. Formatübergreifende Kompatibilität: Die Bibliothek erweitert einige Funktionen von HTML auf andere Dokumentformate wie SVG, MHTML und EPUB und bietet so einen einheitlichen Ansatz für die Handhabung verschiedener Webinhalte.

Sie können die vollständigen Beispiele und Datendateien unter GitHub herunterladen.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.