【发布时间】:2016-03-22 01:46:22
【问题描述】:
我想使用 C# 来解析 HTML 数据。
如果您将 HTML 数据的每个字符都视为有点:true = "html/code"。 false =“显示/内容”。然后你就会知道 HTML 的哪一部分是“代码”。
让我们使用以下 HTML 示例:
<a id="a1" class="c1" attr1="x" attr2="y">a1 c1 attr1</a> <p>a1 c1 attr1 attr2</p>
我想做一个 C# String.Replace 来查找“a1”的所有实例并将其替换为“new1”。 我想做一个 C# String.Replace 来查找“attr1”的所有实例并将其替换为“new2”。 但我只希望 html“代码”受到影响,并且我希望所有“内容”都不会被更改。期望的结果是:
<a id="new1" class="c1" new2="x" attr2="y">a1 c1 attr1</a> <p>a1 c1 attr1 attr2</p>
注意:所需的结果有 2 个未重命名的“a1”的其他实例。 注意:所需的结果有 2 个其他未重命名的“attr1”实例。
我找不到任何有助于这项工作的现有库或软件。
EDIT1:HtmlAgilityPack 可能是一个选项。但是,我仍然无法理解如何使用它来区分代码和非代码?
EDIT2:请记住,这个问题尽可能简化了我的实际问题。重命名带引号和不带引号的东西都不是答案。 我特别需要弄清楚如何区分代码和非代码。
EDIT3:我已将“attr1”作为辅助 String.Replace 包含在内。我需要找到要替换的属性和属性值。而且我需要能够区分代码和非代码。
有什么建议吗?
【问题讨论】:
-
你可以做一个子串,但它会很复杂。
-
是的,使用HtmlAgilityPack,它是为解析HTML而设计的,它甚至擅长解析格式错误的html。
-
我在想 HtmlAgilityPack 可能是一个答案,我以前用过它。但是,我仍然无法理解如何使用它来区分代码和非代码?
-
这不只是 attributes 与 HTML 元素的 innerText 的字符串替换吗?如果是这种情况,那么 HtmlAgilityPack + 替换属性数据就可以解决问题。
-
我同意 Regex 不是一个选项。当您使用正则表达式解决 1 个问题时,您现在有 2 个问题。根据 EDIT3,您将如何解决这个问题?