2016-11-07 2 views
1

Я хочу удалить внутренний стиль из html с помощью C#. Вот мой html текстУдалить внутренний стиль из HTML с помощью Regex C#

<span style="font-family: tahoma; color: #9bbb59;">This is a simple text.</span><br /> 
<table> 
    <thead> 
    </thead> 
    <tbody> 
     <tr> 
      <td>&nbsp;R1C1</td> 
      <td>R1C2</td> 
     </tr> 
     <tr> 
      <td>R2C1</td> 
      <td>R2C2</td> 
     </tr> 
    </tbody> 
</table> 
<style type="text/css" id="telerik-reTable-1"> 
    .telerik-reTable-1 { 
    border-width: 0px; 
    border-style: none; 
    border-collapse: collapse; 
    font-family: Tahoma; 
    } 
    .telerik-reTable-1 td.telerik-reTableFooterEvenCol-1 { 
    padding: 0in 5.4pt 0in 5.4pt; 
    text-align: left; 
    border-top: solid gray 1.0pt; 
    } 
</style> 

Я хочу, чтобы он выглядел после удаления внутреннего css.

<span style="font-family: tahoma; color: #9bbb59;">This is a simple text.</span><br /> 
<table> 
    <thead> 
    </thead> 
    <tbody> 
     <tr> 
      <td>&nbsp;R1C1</td> 
      <td>R1C2</td> 
     </tr> 
     <tr> 
      <td>R2C1</td> 
      <td>R2C2</td> 
     </tr> 
    </tbody> 
</table> 

Я использовал этот рисунок @"<\s*style[^(style>)]*style>". Но это не работает.

Примечание: Я не могу использовать HtmlDocument для удаления дочернего узла. Поскольку не поддерживает отношения родительского дочернего узла. поэтому я хочу использовать регулярное выражение , чтобы удалить CSS.

ответ

1

Используйте этот шаблон, чтобы соответствовать.

<style[^<]*</style\s*> 

Объяснение:

  • <style матч < и style слово.
  • [^<]* соответствует любому персонажу, который не является <, и этот матч происходит несколько раз до <.
  • </ соответствует точно </.
  • style\s*> матч style слово, ноль или более пробел после символа и >.
2

Вы не должны использовать регулярное выражение для анализа HTML-документов. Проверьте этот вопрос, чтобы понять, почему.

RegEx match open tags except XHTML self-contained tags

Вы должны сделать это с HTML Parser, как Html Agility Pack. Вот как вы можете это сделать.

 HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(htmlInput); 

     var nodes = doc.DocumentNode.SelectNodes("//style"); 

     foreach (var node in nodes) 
      node.ParentNode.RemoveChild(node); 

     string htmlOutput = doc.DocumentNode.OuterHtml; 
+0

@ corei11 найти элемент span, стиль которого равен этому, установить атрибут стиля в значение "" – mybirthname

1

Использование System.Xml.Xsl.XslTransform с таблицей стилей, как это:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="style" /> 
</xsl:stylesheet> 
Смежные вопросы