【问题标题】:How to replace span with inline style tag to b tag in c#?c# - 如何用内联样式标签将span替换为c#中的b标签?
【发布时间】:2018-10-26 05:47:31
【问题描述】:

我有一些类似下面的文字

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

我需要用内联样式字体粗细标识该跨度标记并替换为&lt;b&gt; 标记,并且与结束标记相同也替换c# 中的&lt;/b&gt; 标记。我需要如下文本。

<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
  • 你听说过正则表达式吗?
  • 你需要更清楚你想要什么,询问模糊的要求会导致通用的答案(就像我下面的答案)。任何跨度?具有特定属性(如字体粗细)的跨度?你为什么需要它?由另一个进程解析它?以粗体显示部分?那种信息。
  • @TomerW span 属性 font-weight 应该替换为 b

标签: c# regex


【解决方案1】:

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

您也可以从 nuget 安装 HtmlAgilityPack 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;
}

输出:

【讨论】:

  • 还有一个问题,如果 html 中没有任何 span 标签,那么它会出现异常,我该怎么办?
  • foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//span")) 在该行出现异常
  • @UrvishPatel,让我检查一下,我会尽快更新你.. :)
  • @UrvishPatel,你得到object reference error 对吗?
【解决方案2】:

第一个:不要使用正则表达式,虽然它是可能的并且使用它似乎合乎逻辑,
这大多是错误的,充满了痛苦。
可以找到关于它的快乐帖子HERE

第二个:
使用 HTML 解析器(例如 https://html-agility-pack.net/)遍历树
(您可以使用 xPath 轻松找到您要替换的所有 span 元素)
并用b 替换任何span 元素(不要忘记设置新的b 元素内容)

旁注:据我所知,不鼓励使用 b 标签
因此,如果您只需要将跨度文本设为粗体...
已经是因为“font-weight:bold”了。

开启https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b

从历史上看,该元素旨在使文本变为粗体。样式信息自 HTML4 以来已被弃用,因此元素的含义已更改。”和“HTML 将注意力转移到元素 () 用于将读者的注意力吸引到元素的内容上,否则这些内容并不特别重要。” - 谢谢@Richardissimo

【讨论】:

  • 我投了赞成票,但我不确定你的旁注,你能引用 b 被劝阻的参考吗? (它从一开始就在 html 中......)找到它,但它不是 b 标记被弃用,它只是你使用它的方式......developer.mozilla.org/en-US/docs/Web/HTML/Element/b
  • 来自该页面的引用 "从历史上看, 元素旨在使文本变为粗体。样式信息自 HTML4 以来已被弃用,因此 元素的含义已更改.""HTML 引起注意的元素 () 用于将读者的注意力吸引到元素的内容上,这些内容在其他方面没有特别的重要性。"
猜你喜欢
  • 2020-10-19
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 2023-03-10
  • 2016-03-29
  • 2013-01-23
  • 2013-09-05
  • 1970-01-01
相关资源
最近更新 更多