#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package CheckAllXMLFormat # # @todo:¼ì²éËùÓÐxmlÎļþ¸ñʽÊÇ·ñÕýÈ· # @author hxp # @date 2018-06-01 # @version 1.0 # # ÏêϸÃèÊö: ¼ì²éËùÓÐxmlÎļþ¸ñʽÊÇ·ñÕýÈ· # #------------------------------------------------------------------------------- #"""Version = 2018-06-01 17:30""" #------------------------------------------------------------------------------- try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET import ConfigParser import sys import os import re ToolRootPath = os.path.dirname(os.getcwd()) # ¹¤¾ß¸ù·¾¶ ScriptPath = ToolRootPath + "\µ¼±í¹¤¾ß" # ¹¤¾ß½Å±¾Â·¾¶ sys.path.append(ScriptPath + "\PythonLib\lib") CParser = ConfigParser.ConfigParser() CParser.readfp(open(ScriptPath + '\TaskManager.ini')) import CommFunc import Log4P Log4P.SetDebug(CParser.getint('TaskManager', 'Debug')) #дÈëQuestDataGbÎļþ QUESTDATAPath = ToolRootPath + CParser.get('TaskManager', 'QUESTDATAPath') # Öµ²»ÄÜΪ¿ÕµÄÊôÐÔkeyÁбí ValueNotEmptyAttrName = eval(CParser.get('TaskManager', 'ValueNotEmptyAttrName')) # Öµ¿ÉÒÔ°üº¬ÖÐÎĵÄÊôÐÔkeyÁбí ValueCanChAttrName = eval(CParser.get('TaskManager', 'ValueCanChAttrName')) def main(): #¼ì²éËùÓÐxmlÎļþÊÇ·ñ¸ñʽÕýÈ· for parent, dirnames, filenames in os.walk(QUESTDATAPath): for filename in filenames: filePath = os.path.join(parent, filename) fileType = filename.split(".")[1] if fileType.upper() != "XML": continue if not ParseXMLFile(filePath): return Log4P.Info("", "¼ì²éXMLÎļþ¸ñʽOK!", "") os.system("pause") return def ParseXMLFile(filePath): xmlFile = open(filePath) xmlContent = xmlFile.read() xmlFile.close() EncodingFormat = "encoding=\"%s\"" try: for encoding in ["GB2312", "gb2312", "gbk", "GBK"]: findStr = EncodingFormat % encoding if findStr not in xmlContent: continue xmlContent = xmlContent.decode(encoding).encode("utf-8") xmlContent = xmlContent.replace(findStr, EncodingFormat % "utf-8") break except: Log4P.Error("±àÂëÒì³£!", filePath) return try: xmlObj = ET.fromstring(xmlContent) except: Log4P.Error("XMLÎļþ¸ñʽ´íÎó: %s" % filePath) return return CheckXMLObj(filePath, xmlObj) def CheckXMLObj(filePath, xmlObj): if not CheckXMLObjAttr(filePath, xmlObj): return False for c in xmlObj.getchildren(): if not CheckXMLObj(filePath, c): return False return True def CheckXMLObjAttr(filePath, xmlObj): attrDict = xmlObj.attrib for k, v in attrDict.items(): if k in ValueNotEmptyAttrName and v == "": Log4P.Error(filePath, "±êÇ©(%s)ÊôÐÔ(%s)Öµ²»ÄÜΪ¿Õ£¡" % (xmlObj.tag, k), "%s µÄÖµ²»ÄÜΪ¿Õ£¡" % k) return False # ÅжÏÊÇ·ñ´æÔÚÖÐÎÄ if k not in ValueCanChAttrName and CommFunc.contain_zh(v): Log4P.Error(filePath, "±êÇ©(%s)ÊôÐÔ(%s)²»Äܰüº¬ÖÐÎÄ£¡" % (xmlObj.tag, k), u"ÖÐÎÄÊôÐÔÐÅÏ¢: %s=%s" % (k, v)) return False return True main()