diff --git a/pym/cl_profile.py b/pym/cl_profile.py index 8ea39ac..5725638 100644 --- a/pym/cl_profile.py +++ b/pym/cl_profile.py @@ -749,6 +749,8 @@ class xmlDoc: def joinField(self, xmlArea, xmlNewField): + """Объединяет XML ноду область и XML ноду поле""" + print xmlNewField.toprettyxml() newNameField = self.getNameField(xmlNewField) if not newNameField or not newNameField.strip(): return False @@ -766,6 +768,12 @@ class xmlDoc: flagCompare = True for nodeFieldOld in fieldsOldComp: + if newFieldsAction == "drop": + if (nodeFieldOld.nextSibling): + if self.getTypeField(nodeFieldOld.nextSibling) == "br": + xmlArea.removeChild(nodeFieldOld.nextSibling) + xmlArea.removeChild(nodeFieldOld) + continue #if not self.getActionField(nodeFieldOld): #self.setActionField(nodeFieldOld,"insert") #else: @@ -775,7 +783,10 @@ class xmlDoc: if not (newValue in oldValues): flagCompare = False break + if self.getActionField(xmlNewField) == "drop": + return True appSplLst = [] + insSplLst = [] if typeNewField == "seplist": xmlOldField = fieldsOldComp[-1] seplistNewXML = self.getSepListToField(xmlNewField) @@ -795,7 +806,7 @@ class xmlDoc: nextNode = xmlOldField.nextSibling newInsNode = nodeSeplist.cloneNode(True) self.setActionField(newInsNode,"append") - + if nextNode: appSplLst.append((newInsNode, nextNode, @@ -805,13 +816,34 @@ class xmlDoc: False, "append")) else: - xmlArea.insertBefore(\ - nodeSeplist.cloneNode(True), - xmlOldField) + newInsNode = nodeSeplist.cloneNode(True) + if self.getActionField(newInsNode) == "join": + self.setActionField(newInsNode,"append") + insSplLst.append((newInsNode, + xmlOldField)) + #xmlArea.insertBefore(\ + #nodeSeplist.cloneNode(True), + #xmlOldField) parentNode = nodeSeplist.parentNode parentNode.removeChild(nodeSeplist) + insNodesRepl = [] + for newNode, nxtNode in insSplLst: + flagCompareSeplist = False + newValues = self.getFieldValues(newNode) + for nodeRepl, nxtNode in insNodesRepl: + oldValues = self.getFieldValues(nodeRepl) + for newValue in newValues: + if newValue in oldValues: + flagCompareSeplist = True + break + if not flagCompareSeplist: + insNodesRepl.append((newNode, nxtNode)) + + for newNode, nxtNode in insNodesRepl: + xmlArea.insertBefore(newNode,nxtNode) + parentNode = xmlOldField.parentNode if parentNode and newFieldsAction != "join": parentNode.removeChild(xmlOldField) @@ -842,10 +874,10 @@ class xmlDoc: if actionOldNode == "insert" or actionOldNode == "append": pass else: - xmlArea.removeChild(nodeFieldOld) if nodeFieldOld.nextSibling and\ self.getTypeField(nodeFieldOld.nextSibling) == "br": xmlArea.removeChild(nodeFieldOld.nextSibling) + xmlArea.removeChild(nodeFieldOld) return True @@ -2712,6 +2744,16 @@ class apache(named): if isinstance(apacheObj, apache): #print self.docObj.doc.toprettyxml() self.docObj.joinDoc(apacheObj.doc) + # Для добавления перевода строки перед закрывающим тегом + # конфигурационного файла + xmlAreas = xpath.Evaluate("child::area", self.docObj.body) + for xmlArea in xmlAreas: + xmlFields = xpath.Evaluate("child::field", xmlArea) + if not (xmlFields and\ + self.docObj.getTypeField(xmlFields[-1]) == "br"): + xmlArea.appendChild(self.docObj.createField("br", + [],"",[], + False,False)) # Делим область на составные части def findOpenClose(self, text, reOpen, reClose, reComment, reHeader):