Вы можете использовать Linq2Xml, чтобы легко проанализировать код:
XElement doc = XElement.Parse(...)
Затем исправьте неправильные атрибуты, используя алгоритм наилучшего совпадения с действительным словарем атрибутов в памяти.
редактировать: я написал и протестировал этот упрощенный алгоритм наилучшего соответствия (извините, это VB):
Dim validTags() As String =
{
"width",
"height",
"img"
}
(упрощенно, вы должны создать более структурированный словарь с тегами и возможными атрибутами длякаждый тег)
Dim maxMatch As Integer = 0
Dim matchedTag As String = Nothing
For Each Tag As String In validTags
Dim match As Integer = checkMatch(Tag, source)
If match > maxMatch Then
maxMatch = match
matchedTag = Tag
End If
Next
Debug.WriteLine("matched tag {0} matched % {1}", matchedTag, maxMatch)
Приведенный выше код вызывает метод для определения процентного соотношения исходной строки с любым допустимым тегом.
Private Function checkMatch(ByVal tag As String, ByVal source As String) As Integer
If tag = source Then Return 100
Dim maxPercentage As Integer = 0
For index As Integer = 0 To tag.Length - 1
Dim tIndex As Integer = index
Dim sIndex As Integer = 0
Dim matchCounter As Integer = 0
While True
If tag(tIndex) = source(sIndex) Then
matchCounter += 1
End If
tIndex += 1
sIndex += 1
If tIndex + 1 > tag.Length OrElse sIndex + 1 > source.Length Then
Exit While
End If
End While
Dim percentage As Integer = CInt(matchCounter * 100 / Math.Max(tag.Length, source.Length))
If percentage > maxPercentage Then maxPercentage = percentage
Next
Return maxPercentage
End Function
Приведенный выше метод с учетом исходной строки и тега, находит наилучший процент совпадения, сравнивая отдельные символы.
Если в качестве входных данных указан "виджет", он находит "ширину" как наилучшее совпадение со значением совпадения 80%.