2017-01-02 18 views
0

Avoir cette CSS:Comment obtenir des propriétés CSS à partir d'un élément HTML analysé en utilisant AngleSharp

.foo { background-size: 10px 20px; } 

Et ce Html:

<span class="foo"></span> 

Et ce C#:

var parser = new HtmlParser(); 
var doc = parser.Parse("http://localhost/test.html"); 
var element = doc.QuerySelector("span.foo"); 

Comment faire Je reçois la largeur d'arrière-plan associée et la hauteur à élément?

(Actuellement, je suis en utilisant la version 0.9.9 AngleSharp)

Répondre

2

tout d'abord le code C# est erroné. La chaîne que vous transmettez à parser.Parse est un code HTML, pas un URI. De plus, votre code ne fait pas d'analyse CSS - il n'utilise qu'un analyseur HTML. Utilisons donc un contexte de navigation pour obtenir tout ce dont vous avez besoin.

var config = Configuration.Default.WithDefaultLoader().WithCss(); 
var context = BrowsingContext.New(config); 
var document = context.OpenAsync("http://localhost/test.html").Result; 
var element = document.QuerySelector("span.foo"); 
var style = document.DefaultView.GetComputedStyle(element); 
var size = style.BackgroundSize; 

Gardez à l'esprit que element peut être nul si aucun élément n'existe (aucun correspondant à la requête) et que la méthode GetComputedStyle ne fonctionne que de manière limitée. De même, si votre CSS est défini dans une feuille de style externe, assurez-vous d'activer le chargement des ressources.

Espérons que cela aide!

+0

Merci, après une correction mineure, votre code a fonctionné. Il suffit d'ajouter le support de chargement de document à la configuration comme ceci: 'var config = Configuration.Default.WithDefaultLoader(). WithCss();' sinon le corps du document est toujours vide. – SamuGG

+0

Oui en effet (je me suis concentré uniquement sur la partie CSS - j'ai donc passé tout le reste de la configuration). J'ai modifié ma réponse. Merci pour votre rappel! –