diff -r a2f2981df9b0 -r 96b242e4c59d plcopen/plcopen.py --- a/plcopen/plcopen.py Wed Sep 25 11:50:40 2013 +0200 +++ b/plcopen/plcopen.py Fri Sep 27 16:22:40 2013 +0200 @@ -156,35 +156,44 @@ """ % locals() -def LoadProject(filepath): - project_file = open(filepath) - project_xml = project_file.read().replace( +def LoadProjectXML(project_xml): + project_xml = project_xml.replace( "http://www.plcopen.org/xml/tc6.xsd", "http://www.plcopen.org/xml/tc6_0201") for cre, repl in [ (re.compile("(?)(?:)(?!)"), "]]>")]: project_xml = cre.sub(repl, project_xml) + + try: + tree, error = PLCOpenParser.LoadXMLString(project_xml) + if error is not None: + # TODO Validate file according to PLCOpen v1 and modify it for + # compatibility with PLCOpen v2 + return tree, error + return tree, None + except Exception, e: + return None, e.message + +def LoadProject(filepath): + project_file = open(filepath) + project_xml = project_file.read() project_file.close() - - return etree.fromstring(project_xml, PLCOpenParser) + return LoadProjectXML(project_xml) project_pou_xpath = PLCOpen_XPath("/ppx:project/ppx:types/ppx:pous/ppx:pou") def LoadPou(xml_string): - root = etree.fromstring( - LOAD_POU_PROJECT_TEMPLATE % xml_string, - PLCOpenParser) - return project_pou_xpath(root)[0] + root, error = LoadProjectXML(LOAD_POU_PROJECT_TEMPLATE % xml_string) + return project_pou_xpath(root)[0], error project_pou_instances_xpath = { body_type: PLCOpen_XPath( "/ppx:project/ppx:types/ppx:pous/ppx:pou[@name='paste_pou']/ppx:body/ppx:%s/*" % body_type) for body_type in ["FBD", "LD", "SFC"]} def LoadPouInstances(xml_string, body_type): - root = etree.fromstring( - LOAD_POU_INSTANCES_PROJECT_TEMPLATE(body_type) % xml_string, - PLCOpenParser) - return project_pou_instances_xpath[body_type](root) + root, error = LoadProjectXML( + LOAD_POU_INSTANCES_PROJECT_TEMPLATE(body_type) % xml_string) + return project_pou_instances_xpath[body_type](root), error def SaveProject(project, filepath): project_file = open(filepath, 'w')