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