Tengo fragmentos de Html almacenados en una tabla. No páginas enteras, etiquetas o similares, solo formato básico.
Me gustaría poder mostrar ese Html solo como texto, sin formato , en una página determinada (en realidad, solo los primeros 30 a 50 caracteres, pero eso es lo fácil).
¿Cómo coloco el "texto" dentro de ese Html en una cadena como texto simple?
Entonces este fragmento de código.
<b>Hello World.</b><br/><p><i>Is there anyone out there?</i><p>
Se convierte en:
Hola Mundo. ¿Hay alguien ahí afuera?
Respuestas:
Si está hablando de la eliminación de etiquetas, es relativamente sencillo si no tiene que preocuparse por cosas como las
<script>
etiquetas. Si todo lo que necesita hacer es mostrar el texto sin las etiquetas, puede hacerlo con una expresión regular:Si tiene que preocuparse por las
<script>
etiquetas y cosas por el estilo, entonces necesitará algo un poco más poderoso que las expresiones regulares porque necesita rastrear el estado, algo más como una gramática libre de contexto (CFG). Aunque es posible que pueda lograrlo con "De izquierda a derecha" o con coincidencias no codiciosas.Si puede usar expresiones regulares, hay muchas páginas web con buena información:
Si necesita el comportamiento más complejo de un CFG, sugeriría usar una herramienta de terceros, desafortunadamente no conozco una buena para recomendar.
fuente
El HtmlAgilityPack gratuito y de código abierto tiene en una de sus muestras un método que convierte de HTML a texto sin formato.
Aliméntelo con una cadena HTML como
Y obtendrás un resultado de texto sin formato como:
fuente
script
ystyle
etiquetas y escribir el texto interno de otros elementos en la cadena de salida. Dudo que haya pasado muchas pruebas con entradas del mundo real.No pude usar HtmlAgilityPack, así que escribí una segunda mejor solución para mí
fuente
HTTPUtility.HTMLEncode()
está destinado a manejar la codificación de etiquetas HTML como cadenas. Se encarga de todo el trabajo pesado por ti. De la documentación de MSDN :HTTPUtility.HTMLEncode()
método, detallado aquí :Uso:
fuente
Para agregar a la respuesta de vfilby, puede simplemente realizar un reemplazo de RegEx dentro de su código; no son necesarias nuevas clases. En caso de que otros novatos como yo se metan con esta pregunta.
Luego...
fuente
Proceso de tres pasos para convertir HTML en texto sin formato
Primero debe instalar el paquete Nuget para HtmlAgilityPack En segundo lugar, cree esta clase
Al usar la clase anterior con referencia a la respuesta de Judah Himango
En tercer lugar, debe crear el objeto de la clase anterior y usar el
ConvertHtml(HTMLContent)
método para convertir HTML en texto sin formato en lugar deConvertToPlainText(string html);
fuente
Tiene la limitación de no colapsar espacios en blanco largos en línea, pero definitivamente es portátil y respeta el diseño como el navegador web.
fuente
No existe un método con el nombre 'ConvertToPlainText' en el HtmlAgilityPack, pero puede convertir una cadena html en una cadena CLEAR con:
Eso funciona para mí. PERO NO ENCUENTRO UN MÉTODO CON EL NOMBRE 'ConvertToPlainText' EN 'HtmlAgilityPack'.
fuente
Creo que la forma más fácil es hacer un método de extensión de 'cadena' (basado en lo que sugirió el usuario Richard):
Luego, use este método de extensión en cualquier variable de 'cadena' en su programa:
Utilizo este método de extensión para convertir comentarios formateados html a texto sin formato para que se muestre correctamente en un informe de Crystal, ¡y funciona perfectamente!
fuente
La forma más sencilla que encontré:
La clase HtmlFilter se encuentra en Microsoft.TeamFoundation.WorkItemTracking.Controls.dll
El dll se puede encontrar en una carpeta como esta:% ProgramFiles% \ Common Files \ microsoft shared \ Team Foundation Server \ 14.0 \
En VS 2015, el dll también requiere una referencia a Microsoft.TeamFoundation.WorkItemTracking.Common.dll, ubicado en la misma carpeta.
fuente
Si tiene datos que tienen etiquetas HTML y desea mostrarlos para que una persona pueda VER las etiquetas, use HttpServerUtility :: HtmlEncode.
Si tiene datos que contienen etiquetas HTML y desea que el usuario vea las etiquetas representadas, muestre el texto tal cual. Si el texto representa una página web completa, use un IFRAME para ello.
Si tiene datos que tienen etiquetas HTML y desea eliminar las etiquetas y simplemente mostrar el texto sin formato, use una expresión regular.
fuente
Me he enfrentado a un problema similar y he encontrado la mejor solución. El siguiente código funciona perfecto para mí.
}
Los caracteres de escape como \ n y \ r tuvieron que eliminarse primero porque hacen que las expresiones regulares dejen de funcionar como se esperaba.
Además, para que la cadena de resultado se muestre correctamente en el cuadro de texto, es posible que deba dividirla y establecer la propiedad Lines del cuadro de texto en lugar de asignarla a la propiedad Text.
this.txtResult.Lines = StripHTML (this.txtSource.Text) .Split ("\ r" .ToCharArray ());
Fuente: https://www.codeproject.com/Articles/11902/Convert-HTML-to-Plain-Text-2
fuente
Depende de lo que quieras decir con "html". El caso más complejo serían las páginas web completas. También es el más fácil de manejar, ya que puede usar un navegador web en modo texto. Consulte el artículo de Wikipedia que enumera los navegadores web, incluidos los navegadores en modo texto. Lynx es probablemente el más conocido, pero uno de los otros puede ser mejor para sus necesidades.
fuente
Aquí está mi solución:
Ejemplo:
fuente
Tenía la misma pregunta, solo que mi html tenía un diseño simple conocido, como:
Así que terminé usando un código tan simple:
Qué salidas:
fuente
No escribí, pero usé:
fuente
Creo que tiene una respuesta simple:
fuente
Para cualquiera que busque una solución exacta a la pregunta OP para una abreviatura textual de un documento html dado, sin nuevas líneas ni etiquetas HTML, encuentre la solución a continuación.
Al igual que con cada solución propuesta, hay algunas suposiciones con el siguiente código:
he<span>ll</span>o
deberían aparecerhello
. Lista de etiquetas en línea: https://www.w3schools.com/htmL/html_blocks.aspTeniendo en cuenta lo anterior, la siguiente extensión de cadena con expresiones regulares compiladas generará el texto sin formato esperado con respecto a los caracteres de escape html y nulo en la entrada nula.
fuente
public static string StripTags2 (string html) {return html.Replace ("<", "<"). Reemplazar (">", ">"); }
De esta forma, se escapan todos los "<" y ">" en una cadena. ¿Es esto lo que quieres?
fuente