I'm after reading some svg files for their data, so I'm trying to write a generic XML parser.

I'm now attempting to process the nodes into some sort of scenegraph dataset, however I can't see where elements are single lined closed versions or if they open up a new sub group...

If this wasn't for svg and I didn't know what all group types were, how can I tell when an element has a / at the end?

Here's the first part of my code:

func xml_load(fn):
	var d = []
	var parser = XMLParser.new()
	var errorCode = 0
	
	#	LOAD FILE
	errorCode = parser.open(fn)
	if errorCode != OK:
		print(errorCode)
		print("X_XML: open error, ", fn)
		return 1
	"""
	errorCode = parser.open_buffer(xmlPBA)
	if errorCode != OK:
		print(errorCode)
		print("X_XML: buffer error")
		if errorCode == 30:
			print("\t30: ERR_INVALID_DATA")
		return 1
	"""
	
	#	PRIMARY PARSE
	while parser.read() != ERR_FILE_EOF:
		
		var type = parser.get_node_type()
		#print("TYPE: ", type)
		
		if type == 2:		#	NODE_ELEMENT_END
			var o = {"type": "END", "name": parser.get_node_name()}
			d.append(o)
		
		elif type == 3:		#	NODE_TEXT
			var o = {"type": "TXT", "name": parser.get_node_name()}
			o["data"] = parser.get_node_data()
			d.append(o)
			
		elif type == 1:		#	NODE_ELEMENT
			var o = {}
			o["type"] = "E"
			o["name"] = parser.get_node_name()
			o["data"] = parser.get_node_data()
			
			var oo = {}
			if parser.get_attribute_count() > 0:
				for i in range(parser.get_attribute_count()):
					oo[parser.get_attribute_name(i)] = parser.get_attribute_value(i)
			o["vars"] = oo
			d.append(o)
		
		elif type == 0:		#	NODE_NONE
			var o = {"type": "NONE"}	#, "name": parser.get_node_name()}
			o["data"] = parser.get_node_data()
			d.append(o)
		
		elif type == 4:		#	NODE_COMMENT
			var o = {"type": "NOTE", "name": parser.get_node_name()}
			o["data"] = parser.get_node_data()
			d.append(o)
		
		elif type == 5:		#	NODE_CDATA
			var o = {"type": "CDATA", "name": parser.get_node_name()}
			o["data"] = parser.get_node_data()
			d.append(o)
		
		elif type == 6:		#	NODE_UNKNOWN
			var o = {"type": "UKNO", "name": parser.get_node_name()}
			o["data"] = parser.get_node_data()
			d.append(o)
	
	return d