Как заменить span тегом встроенного стиля на тег b в с #?

У меня есть текст, как показано ниже

<span style="font-weight: 700;">Aanbod wielen (banden + velgen) </span>
<br><br>
<span style="font-weight: 500;">lichtmetalen originele Volvo set met winterbanden:<br>origineel:</span> Volvo<br>
<b>inch maat:</b> 15''<br>
<p>steek:</p> 5x108mm<br>
<span style="font-weight: 700;">naafgat:</span>

Мне нужно идентифицировать этот тег span с помощью встроенного стиля font-weight и заменить тегом <b>, и так же, как закрывающий тег, также заменить тег </b> в C#. Мне нужен этот текст, как показано ниже.

<b>Aanbod wielen (banden + velgen)</b>
<br><br>
<b>lichtmetalen originele Volvo set met winterbanden:<br>origineel:</b> Volvo <br>
<b>inch maat:</b> 15''<br>
<p>steek:</p> 5x108mm<br>
<b>naafgat:</b>

так как мы можем идентифицировать. Пожалуйста, помогите мне в этом случае.

что такое Idetified?

Jazb 26.10.2018 07:51

Вы когда-нибудь слышали о регулярных выражениях.

Tobias 26.10.2018 07:53

Вам нужно четко сформулировать, чего вы хотите. Если вы зададите нечеткие требования, то получите общие ответы (например, мой ответ ниже). Любой промежуток? интервалы с определенными атрибутами (например, font-weight)? Зачем тебе это? разобрать его другим процессом? отображать части жирным шрифтом? такая информация.

Tomer W 26.10.2018 08:01

@TomerW span с атрибутом font-weight следует заменить на b

Urvish Patel 26.10.2018 08:07
0
4
342
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

1-й: не используйте Regex, хотя это возможно и кажется логичным использовать так,
в основном это неправильно и полно боли. счастливый пост об этом можно найти ЗДЕСЬ

2-й:
используйте анализатор HTML, такой как https://html-agility-pack.net/, для обхода дерева
(вы можете использовать xPath, чтобы легко найти все элементы span, которые вы хотите заменить)
и замените все элементы span на b (не забудьте установить новое содержимое элемента b)

Боковое примечание: насколько я помню, тег b не рекомендуется
поэтому, если вам нужно, чтобы текст диапазона был полужирным ...
это уже из-за "font-weight: bold".

На https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b:

Historically, the element was meant to make text boldface. Styling information has been deprecated since HTML4, so the meaning of the element has been changed." and "The HTML Bring Attention To element () is used to draw the reader's attention to the element's contents, which are not otherwise granted special importance." – Thanks @Richardissimo

Я проголосовал за, но я не уверен насчет вашего примечания, можете ли вы процитировать ссылку на обескураживаемый b? (Он был в html с самого начала ...) Нашел, но это не тег b, который устарел, а только то, как вы его используете ... developer.mozilla.org/en-US/docs/Web/HTML/Element/b

Richardissimo 26.10.2018 08:10

Цитаты с той страницы «Исторически элемент <b> предназначался для выделения текста жирным шрифтом. Информация о стилях устарела с HTML4, поэтому значение элемента <b> было изменено». и «HTML-элемент« Привлечь внимание »(<b>) используется для привлечения внимания читателя к содержимому элемента, которому не придается особого значения».

Richardissimo 26.10.2018 08:21
Ответ принят как подходящий

Вы можете заменить свой span на b, используя HtmlAgilityPack. И это бесплатно и с открытым исходным кодом.

Вы можете установить HtmlAgilityPack с nuget, а также Install-Package HtmlAgilityPack -Version 1.8.9

public string ReplaceSpanByB()
{
    HtmlDocument doc = new HtmlDocument();

    string htmlContent = File.ReadAllText(@"C:\Users\xxx\source\repos\ConsoleApp4\ConsoleApp4\Files\HTMLPage1.html");

    doc.LoadHtml(htmlContent);

    if (doc.DocumentNode.SelectNodes("//span") != null)
    {
        foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//span"))
        {
            var attributes = node.Attributes;

            foreach (var item in attributes)
            {
                if (item.Name.Equals("style") && item.Value.Contains("font-weight"))
                {
                    HtmlNode b = doc.CreateElement("b");
                    b.InnerHtml = node.InnerHtml;

                    node.ParentNode.ReplaceChild(b, node);
                }
            }
        }
    }

    return doc.DocumentNode.OuterHtml;
}

Выход:

enter image description here

еще один вопрос, если внутри html не было тега span, тогда было исключение, так что мне делать?

Urvish Patel 26.10.2018 09:05

foreach (узел HtmlNode в doc.DocumentNode.SelectNodes ("// span")) в этой строке получает исключение

Urvish Patel 26.10.2018 09:05

@UrvishPatel, дай проверить, скоро обновлю .. :)

er-sho 26.10.2018 09:08

@UrvishPatel, ты правильно понимаешь object reference error?

er-sho 26.10.2018 09:14

Позвольте нам продолжить обсуждение в чате.

Urvish Patel 26.10.2018 09:16

Другие вопросы по теме