Изменить содержимое HTML, сохраненное в таблице БД - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть таблица в БД с общим текстовым полем, которое содержит текст в формате HTML.Мне нужно проанализировать содержимое такого поля, найти все теги «img» и выполнить 2 операции (только для тегов «img»):

1) Удалите атрибут «style» со всеми его значениями.2) Вставьте атрибут class = "img-responseive".

Одной из характеристик анализируемого содержимого 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 голосов
/ 28 сентября 2018

Это то, что я нашел, используя HTML-пакет agility.

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);
    }
}

С документацией HTML Agility Pack можно ознакомиться здесь: https://html -agility-pack.net / documents

По этой ссылке можно увидеть решение, работающее в dotnetfiddle: https://dotnetfiddle.net/uyhAKE

Надеюсь, эта работа для вас.

0 голосов
/ 28 сентября 2018

Я не пишу код на C #, но я уверен, что это можно с успехом сделать с помощью регулярных выражений и заменить его новым отредактированным значением.

...