修改保存在数据库表中的HTML内容

时间:2018-09-28 18:39:09

标签: c# html parsing html-parsing

我在DB中有一个表,其中有一个常规文本字段,其中包含HTML格式的文本。我需要解析此类字段的内容,找到所有“ img”标签并执行2个操作(仅适用于“ img”标签):

1)删除“ style”属性及其所有值。
2)插入class =“ img-sensitive”属性。

要解析的HTML内容的一个特征是它不具有完整的层次结构。例如,要解析的字符串可以如下:

<div>
<p>This is some text</p>
<img src="http://www.mywebsite.com/myImage.jpg" alt = "" style="width:600px; height: 400px;"/>
</div>

我尝试了多种方法来找到“ img”标签,但均未成功。例如:

String strHTML = "The sample HTML code above";
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(strHTML);
foreach (var img in doc.DocumentNode.Descendants("img"))
{
    // Remove "style" attribute for "img" tag.
    // Add class="img-responsive" for "img" tag.
}

上面的代码的问题是没有根节点,但是我不知道如何“覆盖”这样的节点并直接解析字符串。

2 个答案:

答案 0 :(得分:1)

这是我使用敏捷包HTML的方法。

using System;
using HtmlAgilityPack;

public class Program
{
    public static void Main()
    {
        var html = @"<div>
                         <p>This is some text</p>
                         <img src=""http://www.mywebsite.com/myImage1.jpg"" alt = """" style=""width:600px; height: 400px;""/>
                         <img src=""http://www.mywebsite.com/myImage2.jpg"" alt = """" style=""width:600px; height: 400px;""/>
                         <img src=""http://www.mywebsite.com/myImage3.jpg"" alt = """" style=""width:600px; height: 400px;""/>
                    </div>";

        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(html);

        var htmlNodes = htmlDoc.DocumentNode.SelectNodes("//img");

        foreach (var node in htmlNodes){

            // Adding class "img-responsive"
            node.AddClass("img-responsive");

            // Removing style attribute
            node.Attributes["style"].Remove();

            Console.WriteLine(node.OuterHtml);
        }

        // Adding the close </img> to each image of the HTML
        HtmlNode.ElementsFlags["img"] = HtmlElementFlag.Closed;

        // Here you can see the changes in the HTML string
        Console.WriteLine(htmlDoc.DocumentNode.OuterHtml);
    }
}

您可以在此处参考Agility Pack HTML文档:https://html-agility-pack.net/documentation

这是查看在dotnetfiddle中运行的解决方案的链接:https://dotnetfiddle.net/uyhAKE

我希望这项工作对您有用。

答案 1 :(得分:0)

我没有用C#编写代码,但是我确信可以使用正则表达式成功完成此操作,并用新的编辑值替换。