diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/README.md b/README.md index b804ee4..7af539c 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ xml2csv --input "samples/fruits.xml" --output "samples/fruits.csv" --tag "item" Convert an XML table to a CSV file. ``` -xmltable2csv --input "samples/fruits.xml" --output "samples/fruits.csv" --tag "Data" +xmltable2csv --input "samples/simple-table.xml" --output "samples/simple-table.csv" --tag "Data" ``` ###### Arguments diff --git a/samples/simple-table.csv b/samples/simple-table.csv new file mode 100644 index 0000000..56998cd --- /dev/null +++ b/samples/simple-table.csv @@ -0,0 +1,3 @@ +Header 1,Header 2 +Value R1C1,Value R1C2 +Value R2C1,Value R2C2 diff --git a/xmlutils/console.py b/xmlutils/console.py index cdfe172..43faa36 100644 --- a/xmlutils/console.py +++ b/xmlutils/console.py @@ -1,7 +1,7 @@ """ Kailash Nadh, http://nadh.in June 2013 - + License: MIT License Documentation: http://nadh.in/code/xmlutils.py """ @@ -14,14 +14,9 @@ def run_xml2sql(): - print("""xml2sql - --help for help - - """) - # parse arguments parser = argparse.ArgumentParser(description='Convert an xml file to sql.') - parser.add_argument('--input', type=file, dest='input_file', required=True, help='input xml filename') + parser.add_argument('--input', dest='input_file', type=argparse.FileType('r'), required=True, help='input xml filename') parser.add_argument('--output', dest='output_file', required=True, help='output sql filename') parser.add_argument('--tag', dest='tag', required=True, help='the record tag. eg: item') parser.add_argument('--table', dest='table', required=True, help='table name') @@ -42,14 +37,9 @@ def run_xml2sql(): def run_xml2csv(): - print("""xml2csv - --help for help - - """) - # parse arguments parser = argparse.ArgumentParser(description='Convert an xml file to csv format.') - parser.add_argument('--input', dest='input_file', required=True, help='input xml filename') + parser.add_argument('--input', dest='input_file', type=argparse.FileType('r'), required=True, help='input xml filename') parser.add_argument('--output', dest='output_file', required=True, help='output csv filename') parser.add_argument('--tag', dest='tag', required=True, help='the record tag. eg: item') parser.add_argument('--delimiter', dest='delimiter', default=',', help='delimiter character. (default=,)') @@ -72,14 +62,9 @@ def run_xml2csv(): def run_xmltable2csv(): - print("""xmltable2csv by Yigal Lazarev (http://yig.al) - --help for help - - """) - # parse arguments parser = argparse.ArgumentParser(description='Convert an xml file to csv format.') - parser.add_argument('--input', dest='input_file', required=True, help='input xml filename') + parser.add_argument('--input', dest='input_file', type=argparse.FileType('r'), required=True, help='input xml filename') parser.add_argument('--output', dest='output_file', required=True, help='output csv filename') parser.add_argument('--tag', dest='tag', required=True, help='the record tag. eg: Data') parser.add_argument('--delimiter', dest='delimiter', default=',', help='delimiter character. (default=,)') @@ -99,14 +84,9 @@ def run_xmltable2csv(): def run_xml2json(): - print("""xml2json - --help for help - - """) - # parse arguments parser = argparse.ArgumentParser(description='Convert an xml file to json.') - parser.add_argument('--input', type=file, dest='input_file', required=True, help='input xml filename') + parser.add_argument('--input', dest='input_file', type=argparse.FileType('r'), required=True, help='input xml filename') parser.add_argument('--output', dest='output_file', required=True, help='output json filename') parser.add_argument('--pretty', dest='pretty', required=False, default=False, action='store_true', \ help='pretty print? (default=False)') diff --git a/xmlutils/xml2json.py b/xmlutils/xml2json.py index d612508..8e19745 100644 --- a/xmlutils/xml2json.py +++ b/xmlutils/xml2json.py @@ -2,7 +2,7 @@ xml2json.py Kailash Nadh, http://nadh.in December 2012 - + License: MIT License Documentation: http://nadh.in/code/xmlutils.py """ @@ -40,7 +40,13 @@ def get_json(self, pretty=True): try: while True: - event, root = iterator.next() + try: + # for py version 2.x + event, root = iterator.next() + except AttributeError: + # for py version 3.x + event, root = next(self.context) + except StopIteration: print("Event StopIteration found, done!") finally: @@ -73,10 +79,13 @@ def _elem2list(self, elem): block = {} # get the element's children - children = elem.getchildren() + try: + children = elem.getchildren() + except AttributeError: + children = list(elem) if children: - cur = map(self._elem2list, children) + cur = list(map(self._elem2list, children)) # create meaningful lists scalar = False @@ -93,7 +102,7 @@ def _elem2list(self, elem): if scalar: if len(cur) > 1: - cur = {elem[0].tag: [e.values()[0] for e in cur if e.values()[0] is not None]} + cur = {elem[0].tag: [list(e.values())[0] for e in cur if list(e.values())[0] is not None]} else: cur = {elem[0].tag: cur[0].values()[0] } @@ -107,8 +116,8 @@ def _elem2list(self, elem): val = elem.attrib val = val if len(val) > 0 else None - block[elem.tag] = val - + block[elem.tag] = val + return block diff --git a/xmlutils/xml2sql.py b/xmlutils/xml2sql.py index c5264b5..da8268c 100644 --- a/xmlutils/xml2sql.py +++ b/xmlutils/xml2sql.py @@ -2,7 +2,7 @@ xml2sql.py Kailash Nadh, http://nadh.in October 2011 - + License: MIT License Documentation: http://nadh.in/code/xmlutils.py """ @@ -57,7 +57,12 @@ def convert(self, tag="item", table="table", ignore=[], limit=-1, packet=8): self.context = iter(self.context) # get to the root - event, root = self.context.next() + try: + # for py version 2.x + event, root = self.context.next() + except AttributeError: + # for py version 3.x + event, root = next(self.context) items = [] fields = []