Créer un document HTML – Créer ou charger du HTML en C#
Cet article propose un guide détaillé sur la création d’un document HTML. L’API Aspose.HTML for .NET fournit la classe HTMLDocument qui est la racine de la hiérarchie HTML et qui contient l’ensemble du contenu.
Document HTML
Le HTMLDocument est le point de départ de la bibliothèque Aspose.HTML for .NET. Vous pouvez charger la page HTML dans le Document Object Model (DOM) en utilisant la classe HTMLDocument, puis lire et modifier par programme l’arborescence du document, ajouter et supprimer des nœuds, modifier les propriétés des nœuds dans le document tel qu’il est décrit dans les spécifications officielles.
La classe HTMLDocument fournit une représentation en mémoire d’un HTML DOM et est entièrement basée sur les spécifications W3C DOM et WHATWG DOM qui sont prises en charge par de nombreux navigateurs modernes. Si vous connaissez les normes WHATWG DOM, WHATWG HTML et JavaScript, vous pourrez utiliser Aspose.HTML for .NET en toute simplicité. Sinon, vous pouvez visiter www.w3schools.com, où vous trouverez de nombreux exemples et tutoriels sur la façon de travailler avec des documents HTML.
Les documents HTML peuvent être créés à partir de zéro en tant que document vide avec une structure HTML, à partir d’une chaîne, d’un flux de mémoire ou chargés à partir d’un fichier ou d’une URL. Le HTMLDocument possède plusieurs constructeurs surchargés permettant de créer ou de charger des documents HTML.
Créer un document HTML vide
Une fois l’objet document créé, il peut être rempli ultérieurement avec des éléments HTML. L’extrait de code suivant montre l’utilisation du constructeur par défaut HTMLDocument() pour créer un document HTML vide et l’enregistrer dans un fichier.
1// Create an empty HTML document using C#
2
3// Prepare an output path for a document saving
4string documentPath = Path.Combine(OutputDir, "create-empty-document.html");
5
6// Initialize an empty HTML Document
7using (HTMLDocument document = new HTMLDocument())
8{
9 // Work with the document
10
11 // Save the document to a file
12 document.Save(documentPath);
13}
Après la création, le fichier create-empty-document.html apparaît avec la structure initiale du document : le document vide comprend des éléments tels que <html>
<head>
et <body>
. Pour plus de détails sur l’enregistrement des fichiers HTML, voir l’article
Enregistrer un document HTML.
Créer un nouveau document HTML
Si vous souhaitez générer un document de manière programmatique à partir de zéro, veuillez utiliser le constructeur sans paramètres comme indiqué dans l’extrait de code suivant :
1// Create an HTML document using C#
2
3// Prepare an output path for a document saving
4string documentPath = Path.Combine(OutputDir, "create-new-document.html");
5
6// Initialize an empty HTML Document
7using (HTMLDocument document = new HTMLDocument())
8{
9 // Create a text node and add it to the document
10 Text text = document.CreateTextNode("Hello, World!");
11 document.Body.AppendChild(text);
12
13 // Save the document to a disk
14 document.Save(documentPath);
15}
Dans le nouveau document, nous avons créé un nœud de texte, avec la chaîne spécifiée, à l’aide de la méthode CreateTextNode() et l’avons ajouté à l’élément body à l’aide de la méthode AppendChild().
La manière d’éditer un fichier HTML est décrite en détail dans l’article Éditer un document HTML.
Chargement à partir d’un fichier
L’extrait de code suivant montre comment charger le HTMLDocument à partir d’un fichier existant :
1// Load HTML from a file using C#
2
3string htmlFile = Path.Combine(OutputDir, "load-from-file.html");
4
5// Prepare a load-from-file.html document
6File.WriteAllText(htmlFile, "Hello, World!");
7
8// Load from the load-from-file.html
9using (HTMLDocument document = new HTMLDocument(htmlFile))
10{
11 // Write the document content to the output stream
12 Console.WriteLine(document.DocumentElement.OuterHTML);
13}
Dans l’exemple ci-dessus, le document HTML est chargé à partir d’un fichier à l’aide du constructeur
HTMLDocument (string
). Si vous souhaitez charger un fichier HTML existant à partir d’un disque, le travailler et l’enregistrer, l’extrait de code suivant vous sera utile.
1// Load an HTML documment from a file using C#
2
3// Prepare a file path
4string documentPath = Path.Combine(DataDir, "sprite.html");
5
6// Initialize an HTML document from the file
7using (HTMLDocument document = new HTMLDocument(documentPath))
8{
9 // Work with the document
10
11 // Save the document to a disk
12 document.Save(Path.Combine(OutputDir, "sprite_out.html"));
13}
Charger à partir d’une URL
La possibilité de sélectionner des fichiers et d’interagir avec eux sur le périphérique local de l’utilisateur est l’une des caractéristiques les plus utilisées d’Internet. Dans l’extrait de code suivant, vous verrez comment charger une page web dans le HTMLDocument.
Si vous passez une mauvaise URL qui ne peut pas être atteinte à ce moment précis, la bibliothèque lance une DOMException avec le code spécialisé ‘NetworkError’ pour vous informer que la ressource sélectionnée ne peut pas être trouvée.
1// Load HTML from a URL using C#
2
3// Load a document from 'https://docs.aspose.com/html/files/document.html' web page
4using (HTMLDocument document = new HTMLDocument("https://docs.aspose.com/html/files/document.html"))
5{
6 string html = document.DocumentElement.OuterHTML;
7
8 // Write the document content to the output stream
9 Console.WriteLine(html);
10}
Dans l’exemple ci-dessus, nous avons spécifié le fichier document.html à charger à partir de l’URL.
Chargement à partir du code HTML
Si vous préparez un code HTML sous forme d’objets System.String ou System.IO.Stream en mémoire, vous n’avez pas besoin de les enregistrer dans le fichier, il vous suffit de passer votre code HTML dans des constructeurs spécialisés.
Si votre code HTML contient des ressources liées (styles, scripts, images, etc.), vous devez passer un paramètre baseUrl valide au constructeur du document. Il sera utilisé pour résoudre l’emplacement de la ressource pendant le chargement du document.
Chargement à partir d’une chaîne
Vous pouvez créer un document à partir d’une chaîne de caractères en utilisant le constructeur
HTMLDocument (string, string
). Si vous souhaitez créer un document à partir d’une chaîne de caractères directement dans votre code et l’enregistrer dans un fichier, l’exemple suivant peut vous aider : nous produisons un document HTML contenant le texte “Hello, World !
1// Create HTML from a string using C#
2
3// Prepare HTML code
4string html_code = "<p>Hello, World!</p>";
5
6// Initialize a document from the string variable
7using (HTMLDocument document = new HTMLDocument(html_code, "."))
8{
9 // Save the document to a disk
10 document.Save(Path.Combine(OutputDir, "create-from-string.html"));
11}
Chargement à partir d’un flux
Pour créer un document HTML à partir d’un flux, vous pouvez utiliser le constructeur
HTMLDocument(stream, string
) :
1// Load HTML from a stream using C#
2
3// Create a memory stream object
4using (MemoryStream mem = new MemoryStream())
5using (StreamWriter sw = new StreamWriter(mem))
6{
7 // Write the HTML code into memory object
8 sw.Write("<p>Hello, World! I love HTML!</p>");
9
10 // It is important to set the position to the beginning, since HTMLDocument starts the reading exactly from the current position within the stream
11 sw.Flush();
12 mem.Seek(0, SeekOrigin.Begin);
13
14 // Initialize a document from the string variable
15 using (HTMLDocument document = new HTMLDocument(mem, "."))
16 {
17 // Save the document to disk
18 document.Save(Path.Combine(OutputDir, "load-from-stream.html"));
19 }
20}
Document SVG
Étant donné que les graphiques vectoriels évolutifs (SVG) font partie des normes W3C et peuvent être intégrés dans le HTMLDocument, nous avons implémenté le SVGDocument et l’ensemble de ses fonctionnalités. Notre implémentation est basée sur la spécification officielle SVG2, de sorte que vous pouvez charger, lire et manipuler des documents SVG comme décrit officiellement.
Puisque le document SVG et le document HTML sont basés sur le même standard WHATWG DOM, toutes les opérations telles que le chargement, la lecture, l’édition, la conversion et la sauvegarde sont similaires pour les deux documents. Ainsi, tous les exemples de manipulation du document HTML s’appliquent également au document SVG.
Vous pouvez créer un document à partir d’une chaîne de caractères en utilisant le constructeur SVGDocument(string, string)
. Si vous souhaitez charger le document SVG à partir de la variable
System.String en mémoire et que vous n’avez pas besoin de le sauvegarder dans un fichier, l’exemple ci-dessous vous montre comment procéder :
1// Load SVG from a string using C#
2
3// Initialize an SVG document from a string object
4using (SVGDocument document = new SVGDocument("<svg xmlns='http://www.w3.org/2000/svg'><circle cx='50' cy='50' r='40'/></svg>", "."))
5{
6 // Write the document content to the output stream
7 Console.WriteLine(document.DocumentElement.OuterHTML);
8}
Dans l’exemple ci-dessus, nous avons produit un document SVG contenant un cercle d’un rayon de 40 pixels. Pour en savoir plus sur l’utilisation des documents SVG, consultez le chapitre Сomment travailler avec l’API Aspose.SVG.
Document MHTML
MHTML signifie encapsulation MIME d’agrégats de documents HTML. Un fichier MHTML est une archive contenant tout le contenu d’une page web. Il stocke le code HTML d’une page web ainsi que les ressources connexes de la page web, qui peuvent inclure des fichiers CSS, JavaScript, des images et des fichiers audio. Il s’agit d’un format spécialisé pour créer des archives de pages web, et les développeurs web utilisent principalement les fichiers MHTML pour enregistrer l’état actuel d’une page web à des fins d’archivage. La bibliothèque Aspose.HTML for .NET prend en charge ce format, mais avec certaines limitations. Nous ne prenons en charge que les opérations de rendu de MHTML vers les formats de sortie pris en charge. Pour plus de détails, veuillez lire l’article Conversion entre formats.
Document EPUB
EPUB est un format pris en charge par la majorité des lecteurs électroniques et compatible avec la plupart des appareils sur lesquels vous lisez – smartphones, tablettes et ordinateurs. Pour le format EPUB, qui représente un format de publication électronique, nous avons les mêmes limitations que pour MHTML. Nous ne prenons en charge que les opérations de rendu du format EPUB vers les formats de sortie pris en charge. Pour plus de détails, veuillez lire l’article Conversion entre formats.
Opérations asynchrones
Nous sommes conscients que le chargement d’un document peut être une opération gourmande en ressources puisqu’il faut charger non seulement le document lui-même mais aussi toutes les ressources liées et traiter tous les scripts. Ainsi, dans les extraits de code suivants, nous vous montrons comment utiliser des opérations asynchrones et charger le HTMLDocument sans bloquer le fil d’exécution principal :
1// Load HTML asynchronously using C#
2
3// Initialize an AutoResetEvent
4AutoResetEvent resetEvent = new AutoResetEvent(false);
5
6// Create an instance of an HTML document
7HTMLDocument document = new HTMLDocument();
8
9// Create a string variable for the OuterHTML property reading
10string outerHTML = string.Empty;
11
12// Subscribe to ReadyStateChange event
13// This event will be fired during the document loading process
14document.OnReadyStateChange += (sender, @event) =>
15{
16 // Check the value of the ReadyState property
17 // This property is representing the status of the document. For detail information please visit https://www.w3schools.com/jsref/prop_doc_readystate.asp
18 if (document.ReadyState == "complete")
19 {
20 // Fill the outerHTML variable by value of loaded document
21 outerHTML = document.DocumentElement.OuterHTML;
22 resetEvent.Set();
23 }
24};
25
26// Navigate asynchronously at the specified Uri
27document.Navigate("https://docs.aspose.com/html/files/document.html");
28
29// Here the outerHTML is empty yet
30
31Console.WriteLine($"outerHTML = {outerHTML}");
32
33// Wait 5 seconds for the file to load
34
35// Here the outerHTML is filled
36Console.WriteLine("outerHTML = {0}", outerHTML);
ReadyStateChange n’est pas le seul événement qui peut être utilisé pour gérer une opération de chargement asynchrone, vous pouvez également vous abonner à l’événement Load, comme suit :
1// Handle an HTML document load using C#
2
3// Initialize an AutoResetEvent
4AutoResetEvent resetEvent = new AutoResetEvent(false);
5
6// Initialize an HTML document
7HTMLDocument document = new HTMLDocument();
8bool isLoading = false;
9
10// Subscribe to the OnLoad event
11// This event will be fired once the document is fully loaded
12document.OnLoad += (sender, @event) =>
13{
14 isLoading = true;
15 resetEvent.Set();
16};
17
18// Navigate asynchronously at the specified Uri
19document.Navigate("https://docs.aspose.com/html/files/document.html");
20
21Console.WriteLine("outerHTML = {0}", document.DocumentElement.OuterHTML);
Vous pouvez télécharger les exemples complets et les fichiers de données sur GitHub.