2011-02-02 29 views
28

HTML etiketlerini aşağıdaki dizelerden nasıl kaldırabilirim?Dize içindeki HTML etiketlerini kaldırma

<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="LINE-HEIGHT: 115%; 
FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #333333; FONT-SIZE: 9pt">In an 
email sent just three days before the Deepwater Horizon exploded, the onshore 
<SPAN style="mso-bidi-font-weight: bold"><b>BP</b></SPAN> manager in charge of 
the drilling rig warned his supervisor that last-minute procedural changes were 
creating "chaos". April emails were given to government investigators by <SPAN 
style="mso-bidi-font-weight: bold"><b>BP</b></SPAN> and reviewed by The Wall 
Street Journal and are the most direct evidence yet that workers on the rig 
were unhappy with the numerous changes, and had voiced their concerns to <SPAN 
style="mso-bidi-font-weight: bold"><b>BP</b></SPAN>’s operations managers in 
Houston. This raises further questions about whether <SPAN 
style="mso-bidi-font-weight: bold"><b>BP</b></SPAN> managers properly 
considered the consequences of changes they ordered on the rig, an issue 
investigators say contributed to the disaster.</SPAN></p><br/> 

Asponse.PDF dosyasına yazıyorum, ancak HTML etiketleri PDF'de gösterilmiştir. Bunları nasıl kaldırabilirim?

+0

i Etiket kaçmak için kodlamak HTML gerek – jvm

+0

işe yaramadı, HTMLDecode çalıştı. – Joe

+0

Etiketleri kaldırmak mı yoksa biçimlendirmeyi mi uygulamak istiyorsunuz? – SLaks

cevap

89

Uyarı:This does not work for all cases and should not be used to process untrusted user input.

using System.Text.RegularExpressions; 
... 
const string HTML_TAG_PATTERN = "<.*?>"; 

static string StripHTML (string inputString) 
{ 
    return Regex.Replace 
    (inputString, HTML_TAG_PATTERN, string.Empty); 
} 
+8

-1 HTML gibi bağlamsız bir dilbilgisi ayrıştırmak için normal bir ifade kullanmamalısınız. HTML harici bir varlık tarafından sağlanıyorsa, normal ifadenizden kurtulmak için kolayca yönlendirilebilir. –

+6

'genel statik dizi StripTagsCharArray (dize kaynağı) { \t char [] dizi = new char [kaynak.Length]; \t int arrayIndex = 0; \t bool inside = false; \t için (int i = 0; i ') ise \t { \t \t içinde yanlış =; \t \t devamı; \t} \t halinde \t { \t \t dizi [arrayIndex] = izin (iç!); \t \t arrayIndex ++; \t} \t} \t yeni dize döndür (dizi, 0, diziIndex); } 'Regex – AuthorProxy

+0

@mehaase'den yaklaşık 8 kat daha hızlıdır. Ama kim ayrılma hakkında bir şey söyledi? Sadece etiketleri kaldırmak istiyor. Temelde, her defasında ARALIK ya da regex ile bazı html ile eşleşmeye karşı regex ile gerçekten PARSING html arasında temel bir ayrım yapılmalıdır. – capdragon

10

Sen kullanmalıdır HTML Agility Pack:

HtmlDocument doc = ... 
string text = doc.DocumentElement.InnerText; 
+17

Gerçekten insanların neden cevap verdiklerini anlamıyorum. Agility Pack, vücudun .InnerText'inden beri (örnek olarak) biçimlendirilmemiş bir dizge oluşturmaz. Agility Pack'i alan pek çok insan var, o zaman neden hala işaretlemeye, senaryo etiketlerine baktıklarını merak ediyorlar. – radpin

İlgili konular