use xml.dom.minidom 注释xml元素和去除xml注释。
code is:
#!/usr/bin/env python
from xml.dom importminidomimportsys'''get the first web system element, like:
Note, should have only one web system element, if have multiple, the other will be ignored.'''
defgetWebSystemElement(xmlPath):
doc=minidom.parse(xmlPath).documentElement
subsystems= doc.getElementsByTagName('subsystem')for subsystem insubsystems:if subsystem.getAttribute("xmlns").startswith("urn:jboss:domain:web:"):returnsubsystem;'''change to https type
uncomment HTTPS, make HTTPS effective
comment HTTP, make HTTP uneffective'''
defchangeToHttps(webSystem):#comment the HTTP
for node inwebSystem.childNodes:if node.nodeType == node.ELEMENT_NODE and node.nodeName == "connector" and node.getAttribute("name") == "http":
comment=node.ownerDocument.createComment(node.toxml())
node.parentNode.replaceChild(comment, node)else:pass
#uncomment the HTTPS
for node inwebSystem.childNodes:if(node.nodeType ==node.COMMENT_NODE):#parse the comment content to element
element =minidom.parseString(node.data).firstChild
elements=minidom.parseString(node.data)for element inelements.childNodes:if element.nodeType == node.ELEMENT_NODE and element.tagName == "connector" and element.getAttribute("name") == "https":
node.parentNode.replaceChild(element, node)else:pass
'''change to http type
uncomment HTTP, make HTTP effective
comment HTTPS, make HTTPS uneffective'''
defchangeToHttp(webSystem):#comment the HTTPS
for node inwebSystem.childNodes:if node.nodeType == node.ELEMENT_NODE and node.tagName == "connector" and node.getAttribute("name") == "https":#create commented httpsElement
comment =node.ownerDocument.createComment(node.toxml())
node.parentNode.replaceChild(comment, node)else:pass
#uncomment the HTTP
for node inwebSystem.childNodes:if node.nodeType ==node.COMMENT_NODE:#parse the content in the comment to httpsElement
elements =minidom.parseString(node.data)for element inelements.childNodes:if element.nodeType == node.ELEMENT_NODE and element.tagName == "connector" and element.getAttribute("name") == "http":
node.parentNode.replaceChild(element, node)else:pass
defswitchWithException(inputPath, outputPath, hType):if hType == "http":
webSystem=getWebSystemElement(inputPath)
changeToHttp(webSystem)
with open(outputPath,'w') as wf:
c=webSystem.ownerDocument.toxml()
wf.write(c)returnTrueelif hType == "https":
webSystem=getWebSystemElement(inputPath)
changeToHttps(webSystem)
with open(outputPath,'w') as wf:
c=webSystem.ownerDocument.toxml()
wf.write(c)returnTrueelse:print "Type" + hType + "should be http or https"
returnFalse'''switch the http/https type in the standalone.xml
inputPath: the input path of standalone.xml, include the file name
outputPath: the output path of standalone.xml, include the file name'''
defswitch(inputPath, outputPath, hType):try:returnswitchWithException(inputPath, outputPath, hType)exceptBaseException as e:printereturnFalse'''./switch_http_htts.py inputPath outputPath '''
if __name__ == '__main__':if len(sys.argv) != 4:print 'Invalid length of parameter list'sys.exit(1)if switch(sys.argv[1], sys.argv[2],sys.argv[3]):
sys.exit(0)else:
sys.exit(1)