【发布时间】:2015-04-28 13:16:51
【问题描述】:
我需要将 HTML 解析为 xElement。我知道这个解决方案对于格式错误的 HTML 不是很宽容。这很好,因为无论如何我都想陷入无效的 HTML。但是,我不希望 XElement.Parse() 方法在遇到 HTML 实体时失败。
我想知道 .NET 框架中是否内置了一些东西,可以将命名的 HTML 实体转换为数字字符引用。
这行得通,但我真的不想对每个实体都这样做。
Public Function GetEntityReplacementList() As IDictionary(Of String, String)
'http://www.w3.org/TR/html4/sgml/entities.html
Dim _dictonary As New Dictionary(Of String, String)
_dictonary.Add(" ", " ") ' " " non-breaking space
_dictonary.Add("<", "<") '< less than
_dictonary.Add(">", ">") '> greater than
_dictonary.Add("&", "&") '& ampersand
_dictonary.Add("¢", "¢") '¢ cent
_dictonary.Add("£", "£") '£ pound
_dictonary.Add("¥", "¥") '¥ yen
_dictonary.Add("€", "€") '€ euro
_dictonary.Add("©", "©") '© copyright
_dictonary.Add("®", "®") '® registered trademark
_dictonary.Add("‘", "‘") ' single quote
_dictonary.Add("’", "’") ' single quote
_dictonary.Add("“", "“") ' Double quote
_dictonary.Add("”", "”") ' Double quote
_dictonary.Add("•", "•") ' Bullet
_dictonary.Add("ç", "Ç")
_dictonary.Add("ë", "Ç")
_dictonary.Add("é", "é")
_dictonary.Add("—", "—")
_dictonary.Add("è", "È")
_dictonary.Add("á", "á")
_dictonary.Add("–", "–")
Return _dictonary
End Function
<Extension()>
Public Function CreateXElementWithEntityReplacements(p_xml As String) As XElement
For Each _pair In GetEntityReplacementList()
p_xml = Regex.Replace(p_xml, _pair.Key, _pair.Value, RegexOptions.IgnoreCase)
Next
Return XElement.Parse(p_xml)
End Function
【问题讨论】:
-
您是否考虑过改用 HtmlAgilitypack?
-
我有,我暂时避免使用第三方库。
-
有人吗?我在 MSDN 中没有找到任何内容。