我有这个图片标签:
<img src="http://... .jpg" al="myImage" hhh="aaa" />
例如,对于一般图像标记,我保持所有有效属性的列表
L1=(alt, src, width, height, align, border, hspace, longdesc, vpace)
我正在解析img标签,我正在使用这样的已使用属性:
L2=(src, al, hhh)
我如何编程验证图像标签?因此'al'属性应该变为'alt'('alt'属性更像是'align',它包含更多字符)并且'hhh'标签将消失(因为没有属性可以像它一样)?
对于结果,标记应如下所示:
<img src="http://... .jpg" alt="myImage" />
感谢。
杰夫
答案 0 :(得分:1)
标记的解析是最困难的部分,看到你已经完成了,你现在要做的就是循环遍历元素,检查它们是否有效的数组,如果它们无效则检查它们针对一系列常见拼写错误的项目,并根据需要进行替换/删除。
Someting类似于:
String[] ValidItems = {"alt", "src", "width", "height", "align", "border", "hspace", "longdesc", "vpace"};
Dictionary<String, String> MispeltItems = { {"al", "alt" } };
for(int i = ImgTagAttributes-1; i >= 0; i--)
{
var element = ImgTagAttributes[i];
if(!ValidItems.Contains(element))
{
if(MispeltItems.ContainsKey(element))
{
ImgTagElements.Replace(element, MispeltItems[element].Value);
//Or use remove and insert.
}
else
{
ImgTagElements.RemoveAt(i);
}
}
}
(在堆栈溢出中写道,如果有任何错误,只是说,这样你就可以得到一个基本的想法)
答案 1 :(得分:1)
您可以使用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
给定源字符串和标记的上述方法找到比较单个字符的最佳匹配百分比。
将“widt”作为输入,它将“width”视为与80%匹配值的最佳匹配。