Eliminar atributos utilizando HtmlAgilityPack

html html-agility-pack html-parsing

Pregunta

Estoy intentando crear un fragmento de código para eliminar todos los atributos de style independientemente de la etiqueta que use HtmlAgilityPack .

Aquí está mi código:

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

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

Sin embargo, ¿no lo voy a pegar? Si miro el objeto del element inmediatamente después de Remove("style") . Puedo ver que el atributo de estilo se ha eliminado , pero aún aparece en el objeto DocumentNode . : /

Me siento un poco estúpido, pero me parece extraño? ¿Alguien hizo esto usando HtmlAgilityPack? ¡Gracias!

Actualizar

Cambié mi código a lo siguiente, y funciona correctamente:

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();
      }
   }
}

Respuesta aceptada

El fragmento de código parece ser correcto: elimina los atributos. La DocumentNode .InnerHtml es que DocumentNode .InnerHtml (supongo que supervisó esta propiedad) es una propiedad compleja, tal vez se actualice después de algunas circunstancias desconocidas y realmente no debería usar esta propiedad para obtener el documento como una cadena. En lugar de ello, el método HtmlDocument.Save para esto:

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

ahora la variable de result contiene la representación de cadena de su documento.

Una cosa más: su código puede mejorarse cambiando su expresión a "//*[@style]" que le ofrece solo elementos con atributos de style .


Respuesta popular

Aquí hay una solución muy simple.

VB.net

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

do#

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


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow