@@ -679,6 +679,7 @@ def iterfind(self, path, namespaces=None):
679679 def write (self , file_or_filename ,
680680 encoding = None ,
681681 xml_declaration = None ,
682+ xml_declaration_definition = '<?xml version="{version}" encoding="{encoding}"?>' ,
682683 default_namespace = None ,
683684 method = None , * ,
684685 short_empty_elements = True ):
@@ -694,6 +695,14 @@ def write(self, file_or_filename,
694695 is added if encoding IS NOT either of:
695696 US-ASCII, UTF-8, or Unicode
696697
698+ *xml_declaration_definition* -- string for customizing encoding declaration
699+ as documentation always shows doublequotes but
700+ singlequote where hardcoded here.
701+ to be rfc conform which allows doublequotes and
702+ singlequote for declaration. default value is
703+ switched to doublquotes here to stay on one format.
704+ placeholders: {version}, {encoding}
705+
697706 *default_namespace* -- sets the default XML namespace (for "xmlns")
698707
699708 *method* -- either "xml" (default), "html, "text", or "c14n"
@@ -719,8 +728,10 @@ def write(self, file_or_filename,
719728 (xml_declaration is None and
720729 encoding .lower () != "unicode" and
721730 declared_encoding .lower () not in ("utf-8" , "us-ascii" ))):
722- write ("<?xml version='1.0' encoding='%s'?>\n " % (
723- declared_encoding ,))
731+ # version configuration is'nt necessary, can be overwritten
732+ # in declaration_definition at runtime
733+ data = {'version' :'1.0' , 'encoding' : declared_encoding }
734+ write (xml_declaration_definition .format (** data )+ "\n " )
724735 if method == "text" :
725736 _serialize_text (write , self ._root )
726737 else :
0 commit comments