我在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.
}
上面的代码的问题是没有根节点,但是我不知道如何“覆盖”这样的节点并直接解析字符串。
答案 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#编写代码,但是我确信可以使用正则表达式成功完成此操作,并用新的编辑值替换。