def getDigest(algorithm = Digest::MD5, force = false)
return @digest if (!force && @digest)
attr = attributes
children = childNodes
attr_digests = ""
children_digests = ""
if attr
attr_array = attr.sort {|a, b|
DOM.tou16(a.nodeName) <=> DOM.tou16(b.nodeName)}
attr_array.each {|a|
attr_digests << a.getDigest(algorithm, force)
}
end
children_num = 0
children.each {|c|
next if c.nodeType == COMMENT_NODE
children_num += 1
children_digests << c.getDigest(algorithm, force)
}
@digest = algorithm.digest([ELEMENT_NODE].pack("N") +
DOM.tou16(nodeName) +
"\0\0" +
[attr.length].pack("N") +
attr_digests +
[children_num].pack("N") +
children_digests)
end