如何在C#中将内联样式标签的span替换为b标签?

时间:2018-10-26 05:47:32

标签: c# regex

我有如下文字

<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>

我需要用内嵌样式font-weight标识该span标签,并用<b>标签替换,与结束标签相同,还要在c#中替换</b>标签。我需要如下所示的文本。

<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>

那么我们如何识别。在这种情况下,请帮助我。

2 个答案:

答案 0 :(得分:3)

您可以使用HtmlAgilityPackspan替换为b。而且它是免费和开源的。

您也可以从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

答案 1 :(得分:1)

第一:不要使用正则表达式,尽管有可能,并且这样做似乎合乎逻辑,
这主要是错误的,充满痛苦。
可以在HERE

上找到有关它的快乐帖子

2nd:
使用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上:

  

从历史上看,该元素用于使文本变为黑体。自HTML4以来,样式信息已被弃用,因此该元素的含义已更改。”和“将HTML带给元素()用于将读者的注意力吸引到元素的内容上,这些内容在其他情况下没有特别的重要性。” –感谢@Richardissimo