这是一种判断两棵DOM树匹配程度的方法,返回的是两棵树有相同标签节点的最大数目
def TreeMatch(A,B):
med=[0,-1,-1]
if A.tag!=B.tag:return med
m=len(A.getchildren())
n=len(B.getchildren())
maxl=max(m,n)
M=[[0 for x in range(n+1)]for y in range(m+1)]
W=[[0 for x in range(n+1)]for y in range(m+1)]
for i in range(1,m+1):
for j in range(1,n+1):
if W[i][j]<=0:
alist=A.getchildren()
blist=B.getchildren()
relist=TreeMatch(alist[i-1],blist[j-1])
W[i][j]=relist[0]
M[i][j]=max(M[i-1][j],M[i][j-1],M[i-1][j-1]+W[i][j])
tmp=M[m][n]
med[0]=tmp+1
for i in range(1,m+1):
for j in range(1,n+1):
if M[i][j]==tmp:
med[1]=i
med[2]=j
break
return med