Kaynağa Gözat

XML parser best wel af, maar moet nog mooier maken enzo

unknown 14 yıl önce
ebeveyn
işleme
9536cb9504
4 değiştirilmiş dosya ile 141 ekleme ve 0 silme
  1. 28 0
      src/Character.py
  2. 74 0
      src/LicensePlate.py
  3. 4 0
      src/Point.py
  4. 35 0
      src/license_xml_tester.py

+ 28 - 0
src/Character.py

@@ -0,0 +1,28 @@
+from Point import Point
+
+# TODO cleanup the getElements stuff
+class Character:
+    def __init__(self, character):
+        self.dom     = character
+        self.value   = self.get_node("char").firstChild.data
+
+        self.set_corners()
+        print self.corners
+
+    def set_corners(self):
+        corners = self.get_children("quadrangle")
+  
+        self.corners = []
+
+        for corner in corners:
+          if corner.nodeName == "point":
+              self.corners.append(Point(corner))
+
+    def get_node(self, node, dom=None):
+        if not dom:
+            dom = self.dom
+
+        return dom.getElementsByTagName(node)[0]
+
+    def get_children(self, node, dom=None):
+        return self.get_node(node, dom).childNodes

+ 74 - 0
src/LicensePlate.py

@@ -0,0 +1,74 @@
+from xml.dom.minidom import parse 
+from Error import Error
+from Point import Point
+from Character import Character
+
+class LicensePlate:
+
+    def __init__(self, file_path):
+        try:
+            self.dom = parse(file_path)
+        except IOError:
+            Error("Incorrect file name given.")
+            return None
+        else:
+            properties = self.get_properties()
+
+            self.image  = str(properties['uii']) + '.' + str(properties['type'])
+            self.width  = properties['width']
+            self.height = properties['height']
+
+            info = self.set_plate()
+
+    def get_properties(self):
+        children = self.get_children("properties")
+
+        properties = {}
+
+        for child in children:
+            if child.nodeType == child.TEXT_NODE:
+                properties[child.nodeName] = child.data
+            elif child.nodeType == child.ELEMENT_NODE:
+                properties[child.nodeName] = child.firstChild.data
+
+        return properties
+
+    # TODO : create function for location / characters as they do the same
+    def set_plate(self):
+        children = self.get_children("plate") # most recent version
+        
+        for child in children:
+            if child.nodeName == "regnum":
+              self.license_full = child.firstChild.data
+            elif child.nodeName == "identification-letters":
+              self.country = child.firstChild.data
+            elif child.nodeName == "location":
+                corners = self.get_children("quadrangle", child)
+          
+                self.corners = []
+
+                for corner in corners:
+                  if corner.nodeName == "point":
+                      self.corners.append(Point(corner))
+
+            elif child.nodeName == "characters":
+                characters = child.childNodes
+  
+                self.license_characters = []
+
+                for character in characters:
+                  if character.nodeName == "character":
+                    self.license_characters.append(Character(character))
+
+            else:
+                pass
+                #print child.nodeName
+            
+    def get_node(self, node, dom=None):
+        if not dom:
+            dom = self.dom
+
+        return dom.getElementsByTagName(node)[0]
+
+    def get_children(self, node, dom=None):
+        return self.get_node(node, dom).childNodes

+ 4 - 0
src/Point.py

@@ -0,0 +1,4 @@
+class Point:
+    def __init__(self, corner):
+        self.x = corner.getAttribute("x")
+        self.y = corner.getAttribute("y")

+ 35 - 0
src/license_xml_tester.py

@@ -0,0 +1,35 @@
+from LicensePlate import LicensePlate
+
+'''
+ create new LicensePlate object:
+
+ i.e you can do 
+
+ plate = LicensePlate("../XML/test.info") # some xml file from rein
+
+ now available:
+
+ plate.image
+ plate.width
+ plate.height
+
+ Are the entire image widht / height and image is the corresponding image file
+ provided by rein (i.e other folder somewhere)
+
+ plate.corners
+ 
+ plate.license_full  # the entire license plate as a string so 2334AB
+ plate.characters    # for each character from license_full a Character object
+                       exists, kinda same as the license plate. You have a value
+                       = the character / number
+
+                       a corners -> i.e list of points (Point objects)
+
+  TODO had to go so this text is full of crap maybe, anyway enjoy
+ 
+'''
+
+plate = LicensePlate("../XML/test.info") # some xml file from rein
+
+for corner in plate.corners:
+  print corner.x, corner.y