Maison  >  Article  >  interface Web  >  Explication détaillée d'un moteur d'analyse HTML parfait (Jumony)

Explication détaillée d'un moteur d'analyse HTML parfait (Jumony)

零下一度
零下一度original
2017-05-04 14:57:377290parcourir

Peut-être que beaucoup de gens penseront que l'analyseur HTML actuel est suffisant, et que même de simples expressions régulières peuvent déjà répondre aux besoins de manipulation de documents HTML. Oui, pour la grande majorité des documents HTML sur Internet, en fait, la plupart d'entre eux répondent aux spécifications XHTML, et leur analyse ne nécessite pas un analyseur puissant. Mais un analyseur puissant est une chose, et un analyseur parfait en est une autre.

Jumony Core fournit d'abord un moteur d'analyse HTML presque parfait, et ses résultats d'analyse sont infiniment proches de ceux du navigateur. Qu'il s'agisse d'éléments sans balises de fin, d'éléments avec des balises de fin facultatives, d'attributs de balise ou de sélecteurs et styles CSS, tous les documents HTML légaux et illégaux seront analysés par le navigateur, et Jumony les analysera dans quel qu'il soit. En d'autres termes, les résultats de l'analyse de Jumony sont les mêmes que ceux de l'analyse du navigateur, vous n'avez donc plus à vous soucier de savoir si le document HTML peut être reconnu. Si le navigateur peut le lire, Jumony peut le comprendre.

Il n'y a qu'un pas entre la perfection et la puissance, mais un analyseur parfait vous permet de ne jamais avoir à vous soucier du document source HTML.

Ce qui suit est une liste incomplète des fonctionnalités prises en charge par l'analyseur Jumony

Utilisez des guillemets simples pour les valeurs d'attribut Valeur d'attribut manquante (mais avec le signe égal)Il y a un espace devant la valeur de l'attributParseHTML
特性 例子
孤立的7f19db43d97d2d4008bb10f655c09c49解析为文本 3499910bf9dac5ae3c52d5ede7383485>5db79b134e9f6b82c0b36e0489ee08ed应当解析为3499910bf9dac5ae3c52d5ede7383485>5db79b134e9f6b82c0b36e0489ee08ed
标记属性(没有值的属性) f396c7ee6581b8a2c1feb962c201109c
元素丢失结束标签 e388a4556c0f65e1904146cc1a846bee43091600189d2e5d073500b021ca54e8测试链接94b3e26ee717c64999d7867364b1b4a3
可选结束标签元素
"body", "colgroup", "dd", "dt", "head", "html", "li", "option", "p", "tbody", "td", "tfoot", "th", "thead", "tr"
e388a4556c0f65e1904146cc1a846beeabce388a4556c0f65e1904146cc1a846bee123
无结束标签元素
"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "isindex", "link", "meta" , "param", "wbr", "bgsound", "spacer", "keygen"
4faf7b57895b870867b99beee44351ac
CDataÉlément 3f1c4e4b6b16bbbd69b2ee476dc4f83aif ( 11027f152cc5b3cb62c2e445c3c9a350d" );2cacc6d41bbb37262a98f745aa00fbf0
"script", "style", "textarea", "title"  
Élément préformaté e03b848252eb9375d56be284e690e873 ;
3dfcb9713371fca7aa68a061e64798a5
2de933bd81cf0e954926b4b4a48640c3
05797ff6bfecf7b84525904378753179
Déclaration 8b05045a5be5764f313ed5b9168a17e6


Non seulement elle peut analyser le HTML à partir du texte, mais l'API de Jumony peut directement récupérer l'analyse des documents sur Internet et identifier automatiquement les encodages basés sur les en-têtes HTTP :

new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" )

Et actuellement, seulement le deuxième HTML de Jumony d'analyse du projet open source HtmlAgilityPack a depuis longtemps cessé de se mettre à jour. Après tant d'années, il y a toujours des problèmes avec l'analyse des éléments ff9c23ada1bcecdd1a0fb5d5a0f18437

2. Prise en charge des paramètres de style CSS

La simple analyse HTML parfaite n'apporte pas beaucoup d'avantages. Comme mentionné ci-dessus, en fait, la plupart des documents HTML peuvent être analysés avec une analyse de second ordre. même de simples expressions régulières, alors pourquoi avons-nous besoin de Jumony ?

La réponse est qu'un moteur HTML ne se limite pas à analyser la structure DOM.

Considérez ce scénario : je dois définir une valeur aucune pour le style d'affichage d'un élément. Dans le navigateur, nous n'avons besoin que d'un simple element.style.display = "none" pour répondre à nos exigences. Maintenant, nous avons obtenu le DOM dont nous avons besoin via l'analyseur, mais avons-nous encore besoin de concaténer des chaînes pour définir le style ?

Pas besoin, Jumony prend en charge l'analyse de style CSS, et même certaines règles d'abréviation de style CSS peuvent être reconnues Dans Jumony, définir un style pour un élément est aussi simple que dans le navigateur :

element.Style( "display", "none" )
<.>Regardons à nouveau cet exemple : 7cd3a19f7494deb2fc114a1203d0dae994b3e26ee717c64999d7867364b1b4a3, que se passera-t-il si nous définissons padding-left: 0px sur cet élément ?

Dans Jumony, le résultat sera :

<p style="padding-left: 0px; padding-right: 5px; padding-top:5px; padding-bottom: 5px"></p>
Regardez, l'attribut padding est automatiquement développé comme par magie.


3. Prise en charge du sélecteur CSS 3

Le sélecteur CSS est un langage de requête populaire dans le monde HTML. Il est simple et puissant et est pris en charge par de nombreux navigateurs. Jumony prend également en charge des sélecteurs CSS3 presque complets (à l'exception des pseudo-classes et pseudo-objets d'exécution). A l'aide de sélecteurs, nous pouvons facilement trouver les objets qui nous intéressent en HTML. Par exemple, récupérez tous les titres des articles sur la page d'accueil du parc de blogs :

new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" )
Capturer, analyser, sélectionner, en une seule fois. Avec un simple code, nous pouvons sortir les données que nous avons capturées. la console :

 foreach( var title = new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" ) )
  Console.WriteLine( title.InnerText() );
Liste des sélecteurs CSS3 supportés par Jumony :

Sélecteur Description
* Sélectionner tous les éléments
p a Sélectionner les éléments descendants
p>a Sélectionner l'élément enfant
p+a Sélectionner les éléments adjacents
p~a Sélectionnez l'élément successeur
[attr] L'attribut existe, sélectionnez
[attr=value] La valeur de l'attribut correspond exactement
[attr ~=value] Correspondance approximative de la valeur d'attribut
[attr^=value] La valeur de l'attribut commence par la correspondance
[attr*=value] La valeur de l'attribut contient une correspondance
[attr$=value] La valeur de l'attribut se termine par une correspondance
[attr!=value] Correspondance négative de la valeur d'attribut
:non Pseudo-classe négative
:enfant unique Seul pseudo-classe d'élément enfant
 : uniquement de type Type uniquement pseudo- class
:empty Pseudo-classe d'élément vide
:ntième-enfant Pseudo-classe structurée
:ntième-dernier-enfant Pseudo-classe structurée
:ntième de type Pseudo-classe structurée
:ntième-dernier-de-type Pseudo-classe structurée
:premier-enfant Pseudo-classe structurée
:dernier-enfant Pseudo-classe structurée
: première du type Pseudo-classe structurée
:dernier-de-type Pseudo-classe structurée


4. Évolutivité puissante

Dans Jumony Core 3, il offre aux utilisateurs une évolutivité maximale. Vous pouvez personnaliser les spécifications HTML, implémentez votre propre analyseur, greffez d'autres modèles DOM à l'API Jumony, inventez votre propre pseudo-classe de sélecteur CSS, ou même modifiez votre propre API, comme le style jQuery.

Jumony Core a de nombreux projets dérivés, tels que l'exploration de sites Web, la fourniture d'API de style jQuery, le développement de sites Web, la création de fichiers MHT, l'ajout de la prise en charge du sélecteur CSS pour les résultats d'analyse HAP, etc. Ces projets nécessitent tous de bénéficier du puissant évolutivité de Jumony Core, il peut exercer des fonctions puissantes.

[Recommandations associées]

1. Tutoriel vidéo HTML en ligne gratuit

2. Manuel de développement HTML

3.Tutoriel vidéo html5 original php.cn

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn