Удалить атрибуты с помощью HtmlAgilityPack - PullRequest
20 голосов
/ 01 мая 2011

Я пытаюсь создать фрагмент кода для удаления всех атрибутов 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();
      }
   }
}

Ответы [ 2 ]

7 голосов
/ 06 мая 2011

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

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

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

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

3 голосов
/ 05 августа 2014

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

VB.net

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

с #

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