Guest User

Untitled

a guest
Jun 18th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. from xml.dom.minidom import parse
  2. import sys
  3.  
  4. def walk_nodes(root, type_filter=(), bad_names=('#text',)):
  5. """Return all nodes in the tree as a list"""
  6.  
  7. traversed = [] #Traversed nodes
  8. to_traverse = [root] #Nodes we have not yet visited
  9.  
  10. while len(to_traverse) > 0: #Depth first traversal
  11. current = to_traverse.pop()
  12.  
  13. if (current.nodeType in type_filter or len(type_filter) == 0) and current.nodeName not in bad_names:
  14. to_traverse.extend(current.childNodes)
  15.  
  16. #Compensate for weird #text nodes
  17. if current.nodeName not in bad_names:
  18. traversed.append(current)
  19.  
  20. return traversed
  21.  
  22. def find_nodes(root, node_name):
  23. """Finds all nodes with the given name under root"""
  24. return [node for node in walk_nodes(root) if node.nodeName == node_name]
  25.  
  26. def compare_nodes(root1, root2, element_name='Signal', attr='Name'):
  27. """Given two root nodes, find the elements with the given name and do a set difference based on the attribute name"""
  28. attr1 = set([element.getAttribute(attr) for element in root1.getElementsByTagName(element_name)])
  29. attr2 = set([element.getAttribute(attr) for element in root2.getElementsByTagName(element_name)])
  30.  
  31. return attr2 - attr1
  32.  
  33. def choice_nodes(root):
  34. """Find all possible element names in the tree"""
  35.  
  36. return set([node.nodeName for node in walk_nodes(root, (1,))])
  37.  
  38. if __name__ == '__main__':
  39. assert len(sys.argv) >= 3, 'You must provide valid xml file!'
  40.  
  41. #Move past the Document tag
  42. dom1 = parse(sys.argv[1]).firstChild
  43. dom2 = parse(sys.argv[2]).firstChild
  44.  
  45. for name in compare_nodes(dom1, dom2):
  46. print name
Add Comment
Please, Sign In to add comment