2017-01-02 4 views
0

Имея этот CSS:Как получить свойства CSS от разобранного элемента HTML, используя AngleSharp

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

И этот HTML:

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

И это C#:

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

Как Я получаю связанную ширину и высоту фона до элемент?

(В настоящее время я использую AngleSharp версии 0.9.9)

ответ

2

Прежде всего C# код неправильно. Строка, которую вы передаете parser.Parse, является кодом HTML, а не URI. Также ваш код не выполняет синтаксический разбор CSS - он использует только парсер HTML. Таким образом, давайте использовать контекст просмотра, чтобы получить все, что вам нужно.

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; 

Имейте в виду, что element может быть пустым, если такой элемент не существует (ни один соответствующий запрос) и что метод GetComputedStyle работает только в ограниченном объеме. Также, если ваш CSS определен во внешней таблице стилей, обязательно активируйте загрузку ресурсов.

Надеюсь, это поможет!

+0

Спасибо, после незначительного исправления, получил ваш код. Просто нужно добавить поддержку загрузки документа в конфигурацию следующим образом: 'var config = Configuration.Default.WithDefaultLoader(). WithCss();' иначе тело документа всегда пустое. – SamuGG

+0

Да, действительно (я сосредоточился только на части CSS, поэтому я пропустил все остальное из конфига). Я изменил свой ответ. Спасибо за напоминания! –