Análisis de HTML utilizando c #

c# html html-agility-pack replace string

Pregunta

Estoy trabajando en un sitio web asp.net. Necesito reemplazar una cadena en particular en el html usando c #. El siguiente es el html. Aquí necesito reemplazar "@name" por un nombre válido usando el código c #. Intenté usar el script java. Está funcionando. ¿Cómo puedo lograr esto usando c #?

¿Cómo puedo obtener el HTML de la página actual usando c # o HtmlAgilityPack para analizarlo?

HTML:

<div>
In the @name, you may have configured an iPad in both the AppleDevices and the TabletDevices configuration. However, because AppleDevices may have been set for a small display size, you want an iPad to use the TableDevices configuration (which has a larger screen). Reorder the devices in the following order so that an iPad will use the TableDevices configuration first.
Tablet Devices
Apple Devices
</div>

Respuesta aceptada

Suponiendo que esto es MVC, eche un vistazo a mi proyecto CsQuery . CsQuery es un puerto jQuery y un motor selector de CSS, que puede utilizar para trabajar con el HTML directamente. Pero lo más importante es que el proyecto incluye un ejemplo con código para acceder al HTML de una página antes de que se muestre en C # bajo MVC.

Acceder a las vistas parciales es bastante fácil, consulte la publicación del blog de Rick Strahl sobre el tema.

Sin embargo, si desea acceder a todo el HTML de una página y posiblemente modificarlo antes de que se represente, debe crear un ViewEngine personalizado y realizar devoluciones de llamada al controlador, desde donde podrá acceder al HTML. Hay un poco involucrado en hacer esto bien. En lugar de copiar cientos de líneas de código, observe la aplicación MVC de ejemplo incluida con CsQuery, específicamente las clases en la carpeta CsQueryView :

https://github.com/jamietre/CsQuery/tree/master/examples/CsQuery.MvcApp

Esto incluye un motor de visualización personalizado y una clase base de controlador personalizada que le permite agregar métodos a los controladores de esta manera:

// runs for all actions
public void Cq_Start()
{
    Doc["a.not-allowed"]
        .Attr("onclick","javascript:alert('You're not authorized to click this')");
}

// runs for the Index action
public void Cq_Index()
    Doc["div"].Css("border", "1px solid red;");
}

Estos métodos se llaman después de los métodos de acción regular que corresponden y establecen el valor de Doc . Doc es un objeto CQ (el objeto central en CsQuery). Esto contiene todo el HTML para una página. Es como un objeto jQuery. En tu situación, puedes usar métodos de jQuery como:

// select all divs on the page
var div = Doc["div"];

// do parameter substitution
var newText = div.Text().Replace("@name", valid_name);

// update the text
div.Text(newText);

Para cambiar su aplicación MVC para usar este motor de vista, debe agregar este código a Application_Start :

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CsQueryViewEngine());

Sin embargo, si no quiere usar CsQuery, el ejemplo debería mostrarle cómo acceder a la salida HTML en MVC antes de representarse. Utiliza la reflexión para descubrir los métodos para devolver la llamada a su controlador, y podría adaptarse fácilmente para proporcionar una cadena de HTML en lugar de un objeto CsQuery.


Respuesta popular

La forma más sencilla es usar el String.Replace(String, String) :

string newString = html.Replace("@name", "valid name");


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué