Skip to content

Instantly share code, notes, and snippets.

@dracoBoreus
Last active April 4, 2022 15:14
Show Gist options
  • Save dracoBoreus/ac38bc58cb24e2a4b6fd346ced6e009f to your computer and use it in GitHub Desktop.
Save dracoBoreus/ac38bc58cb24e2a4b6fd346ced6e009f to your computer and use it in GitHub Desktop.
XML Transformer
import argparse
import logging
import sys
import lxml.etree as ET
def load_dom(input_file):
parser = ET.XMLParser(resolve_entities=False, no_network=True)
try:
domfile = open(input_file, 'r')
return ET.parse(domfile, parser)
except OSError:
logging.error("The file is not readable: " + input_file)
sys.exit()
def transform(xml, xsl):
ac = ET.XSLTAccessControl.DENY_ALL
transform = ET.XSLT(xsl, access_control=ac)
return transform(xml)
def save_output(transformed, output_file, input_file):
try:
if (output_file):
transformed.write(output_file, method="xml", pretty_print=True)
else:
transformed.write(input_file.replace(
'.xml', '_transformed.xml'), method="xml", pretty_print=True)
except OSError:
logging.error("The file is not writeable: " + output_file)
sys.exit()
def main():
parser = argparse.ArgumentParser(description="XML Transformer")
parser.add_argument(
"-xml", help="the xml file to transform", required=True)
parser.add_argument(
"-xsl", help="the xsl file for transform", required=True)
parser.add_argument(
"-o", "--output", help="the output xml file")
parser.add_argument("-p", "--show",
type=int, choices=[0, 1], default=0)
args = parser.parse_args()
transformed = transform(load_dom(args.xml), load_dom(args.xsl))
save_output(transformed, args.output, args.xml)
# print(type(transformed))
if(args.show == 1):
print(transformed)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment