|
11 | 11 | log = logging.getLogger(__name__) |
12 | 12 |
|
13 | 13 |
|
14 | | -class Py27CommentedTreeBuilder(XmlET.TreeBuilder): |
| 14 | +class CommentedTreeBuilder(XmlET.TreeBuilder): |
| 15 | + |
| 16 | + non_comment_seen = False |
15 | 17 |
|
16 | 18 | def doctype(*args): |
17 | 19 | # handle deprecation warning for XMLParsing a file with DOCTYPE |
18 | 20 | pass |
19 | 21 |
|
| 22 | + def start(self, tag, attrib): |
| 23 | + if tag is not XmlET.Comment: |
| 24 | + self.non_comment_seen = True |
| 25 | + super(CommentedTreeBuilder, self).start(tag, attrib) |
| 26 | + |
20 | 27 | def comment(self, data): |
21 | | - self.start(XmlET.Comment, {}) |
22 | | - self.data(data) |
23 | | - self.end(XmlET.Comment) |
| 28 | + if self.non_comment_seen: |
| 29 | + # Cannot start XML file with comment |
| 30 | + self.start(XmlET.Comment, {}) |
| 31 | + self.data(data) |
| 32 | + self.end(XmlET.Comment) |
24 | 33 |
|
25 | 34 |
|
26 | 35 | def create_and_write_tmp_file(elem): |
@@ -84,7 +93,7 @@ def parse_xml(file_name, check_exists=True): |
84 | 93 |
|
85 | 94 | with open(file_name, 'r') as fobj: |
86 | 95 | try: |
87 | | - tree = XmlET.parse(fobj, parser=XmlET.XMLParser(target=Py27CommentedTreeBuilder())) |
| 96 | + tree = XmlET.parse(fobj, parser=XmlET.XMLParser(target=CommentedTreeBuilder())) |
88 | 97 | except Exception as e: |
89 | 98 | error_message = "Exception attempting to parse %s: %s" % (str(file_name), str(e)) |
90 | 99 | log.exception(error_message) |
|
0 commit comments