Last active
April 4, 2022 15:14
-
-
Save dracoBoreus/ac38bc58cb24e2a4b6fd346ced6e009f to your computer and use it in GitHub Desktop.
XML Transformer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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