Стили конкретных стилей из атрибута Style в строке HTML с использованием Html Agility Pack

c# html-agility-pack html-parsing

Вопрос

У меня есть строка Html и она содержит разнообразные Html, но включает в себя

<span style="display:block;position:fixed;width:100%;height:2000px;background-color:rgba(0,0,0,0);z-index:9999!important;top:0;left:0;cursor:default;"></span>

Это будет казаться странным, но я хочу только удалить определенные элементы в атрибуте style (для всех элементов HTML). Например, я хочу удалить

position:fixed и z-index:9999!important; и top:0; и left:0;

Чтобы назвать несколько, но сохраните все остальное. Теперь проблема в том, что это не обязательно position:fixed; это может быть position:absolute; или что-то еще. Так же, как это может быть z-index:9998; или top:20; и т.д...

Мне нужно убрать элементы стиля по их ключу, так что position:*anything* и top:*anything* т. Д. И также делать это нечувствительным к делу способом. Таким образом, он получит POSITION:*anything* or PoSition:*anything*

Есть ли способ достичь этого, используя Html Agility Pack?

Популярные ответы

Кажется, что нет поддержки для синтаксического анализа строки в стиле HTML в Agility Pack, но .NET имеет некоторые возможности для этого в System.Web.UI для поддержки элементов управления WebForms.

Он называется CssStyleCollection , и он преобразует вашу строку style в симпатичный массив пар ключ / значение строки и позволяет удалить определенные ключи, которые вы не хотите.

Однако, поскольку это внутренний инструмент для использования WebControl, он не имеет открытого конструктора. Вместо этого вам нужно создать экземпляр объекта с помощью отражения или использовать такой взломать;

CssStyleCollection style = new Panel().Style;

После создания,

style.Value = "YOUR STYLE STRING"; 

Затем удалите элементы, которые вам не нужны;

style.Remove("position");
style.Remove("z-index");
style.Remove("top");
style.Remove("left");

Получите новую строку стиля с разделителями из style.Value . style.Value .

ВАЖНО: я не тестировал это, но процесс кажется достаточно простым, если немного взломать. Могут быть некоторые неожиданности, с которыми я еще не сталкивался. В частности, я понятия не имею, как он обрабатывает ситуации, когда в одной строке есть несколько повторяющихся настроек стиля;

top:0;margin-left:20;top:10; 

В строках строкового стиля браузеры будут соблюдать последнее заданное значение, поэтому top:10 побед. Однако, поскольку CssStyleCollection использует уникальные ключи, он не может хранить оба top значения и, скорее всего, отбрасывает один.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow