Удалить атрибуты с помощью HtmlAgilityPack

html html-agility-pack html-parsing

Вопрос

Я пытаюсь создать фрагмент кода, чтобы удалить все атрибуты style независимо от тега, используя HtmlAgilityPack .

Вот мой код:

var elements = htmlDoc.DocumentNode.SelectNodes("//*");

if (elements!=null)
{
    foreach (var element in elements)
    {
        element.Attributes.Remove("style");
    }
}

Однако, я не заставляю его держаться? Если я посмотрю на element сразу после Remove("style") . Я вижу, что атрибут стиля удален , но он все еще появляется в объекте DocumentNode . : /

Я чувствую себя немного глупо, но мне кажется, что это похоже на меня? Кто-нибудь сделал это с помощью HtmlAgilityPack? Благодаря!

Обновить

Я изменил свой код на следующий, и он работает правильно:

public static void RemoveStyleAttributes(this HtmlDocument html)
{
   var elementsWithStyleAttribute = html.DocumentNode.SelectNodes("//@style");

   if (elementsWithStyleAttribute!=null)
   {
      foreach (var element in elementsWithStyleAttribute)
      {
         element.Attributes["style"].Remove();
      }
   }
}

Принятый ответ

Ваш фрагмент кода кажется правильным - он удаляет атрибуты. Дело в том, что DocumentNode .InnerHtml (я предполагаю, что вы контролировали это свойство) является сложным свойством, возможно, он обновляется после некоторых неизвестных обстоятельств, и вы фактически не должны использовать это свойство, чтобы получить документ в виде строки. Вместо этого метод HtmlDocument.Save для этого:

string result = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    result = writer.ToString();
}

теперь переменная result хранит строковое представление вашего документа.

Еще одна вещь: ваш код может быть улучшен путем изменения вашего выражения на "//*[@style]" который получает только элементы с атрибутом style .


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

Вот очень простое решение

VB.net

element.Attributes.Remove(element.Attributes("style"))

C #

element.Attributes.Remove(element.Attributes["style"])


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему