【问题标题】:How to remove duplicate attributes from HTML without using HTMLAgilityPack?如何在不使用 HTMLAgilityPack 的情况下从 HTML 中删除重复的属性?
【发布时间】:2013-10-23 15:30:20
【问题描述】:

我有喜欢的html

    ...<button type="submit" name="ctl00$ctl16$ctl00$ctl00$searchButton" value=""
 id="ctl00_ctl16_ctl00_ctl00_searchButton" type="submit" class="search-submit" value="Search">...

并且需要通过程序删除重复的标签,例如 type="submit" 。是否可以不使用 HTMLAgilityPack 之类的库?例如正则表达式。

【问题讨论】:

  • 有可能吗?好吧,C# 是图灵完备的,所以可以肯定。 RegExp,就其本身而言,没有。 HTMLAgilityPack 有什么问题?
  • 我无法在该任务中使用任何库。用于挑战的任务 HTMLParser 的那部分。
  • 但是不能只修改原来的ASPX吗?我的意思是,这显然是 ASP.NET,所以我认为您没有理由去更正生成的 HTML。下次生成时,您将再次拥有重复的属性。
  • 这是我试图解析的来自microsoft.com/ru-by/default.aspx 的html 的一部分。整个任务是从 html 中获取所有 css 文件,并在该页面上搜索未使用的样式而不使用库。我的解决方案是 - 从 css 选择器 xpathes 制作,并使用 Xdocument。但是方法 Xdocument.Parse 在任何无效的 html 上都失败了,所以我做了解析前清理:)
  • 我想我找到了解决方案。但不是最好的。我使用 XDocument.Parse,并得到 @"'(.*)' 是一个重复的属性名称。行 (\d),位置 (\d*)。";异常,然后我用正则表达式解析它并用它的值替换属性 html

标签: c# html tags


【解决方案1】:

假设您试图删除重复的属性在同一个标​​签内,那么这很棘手,因为如果不解析每个标签就无法做到这一点。而解析出每个标签都需要解析其他所有内容,包括cmets、文本、引用文本等。

因此,您可以在不使用库的情况下做到这一点的唯一方法是编写自己的 HTML 解析器。这就是为什么使用 HTML Agility Pack 或我自己的 HTML Monkey 会更容易的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多