homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author GPU.Group
Recipients GPU.Group
Date 2011年08月30日.18:50:57
SpamBayes Score 5.0176263e-06
Marked as misclassified No
Message-id <1314730258.77.0.934592208452.issue12863@psf.upfronthosting.co.za>
In-reply-to
Content
Py32 > Lib > xml.dom.minidom > usage feedback > overrides
I like the minidom. I use it -and over-ride the Element.writexml() and _write_data() methods for a few of my Blender.org B259 personal export scripts to formats:
.x3d - a www.web3d.org public format, an xml-like version of vitual reality .vrml, except it wants single quotes with double quotes inside:
'"EXAMINE" "ANY"'. It's an attribute heavy format.
.kml - an earth.google.com format, element heavy. By default minidom puts extra lines backslash n so the following comes out on 3 lines:
		<description>
			1909 era from 1891 to 1930
		</description>
and I want something more compact on one line:
<description>1909 era from 1891 to 1930</description>
In both cases I over-ride the minidom:
save_original_writexml = xml.dom.minidom.Element.writexml 
xml.dom.minidom.Element.writexml = writexml_pluto
... do my exporting ...
# other registered scripts share the minidom, so restore it
xml.dom.minidom.Element.writexml = save_original_writexml
I'm happy with this, as long as I remember to update my minidom overrides with new py versions. I mention it in case I'm using it wrong or in case you like what I'm doing and want to adopt or spread the word.
more...
kml over-ride for compact element-heaviness:
 def _write_data_orig(writer, data):
 "Writes datachars to writer."
 if data:
 data = data.replace("&", "&amp;").replace("<", "&lt;"). \
 replace("\"", "&quot;").replace(">", "&gt;")
 writer.write(data)
 
 
 def writexml_plutokml(self, writer, indent="", addindent="", newl=""):
 # indent = current indentation
 # addindent = indentation to add to higher levels
 # newl = newline string
 writer.write(indent+"<" + self.tagName)
 attrs = self._get_attributes()
 a_names = sorted(attrs.keys())
 for a_name in a_names:
 writer.write(" %s=\"" % a_name)
 _write_data_orig(writer, attrs[a_name].value)
 writer.write("\"")
 if self.childNodes:
 #pluto- writer.write(">%s"%(newl))
 writer.write(">") # pluto+
 tx = False # pluto+
 k=0 # pluto+
 for node in self.childNodes:
 k=k+1 # p+
 if node.nodeType == Node.TEXT_NODE: # p+
 node.writexml(writer,"","","") # p+
 tx = True # p+
 else: # p+
 if k == 1: writer.write(newl) # p+
 node.writexml(writer, indent + addindent, addindent, newl)
 if tx: # p+
 writer.write("%s</%s>%s" % ("",self.tagName,newl)) # p+
 else: # p+
 writer.write("%s</%s>%s" % (indent, self.tagName, newl))
 else:
 writer.write("/>%s"%(newl))
x3d over-ride for apos (versus quote) attribute delimeters:
 def _write_data_pluto(writer, data):
 "Writes datachars to writer."
 if data:
 data = data.replace("&", "&amp;").replace("<", "&lt;"). \
 replace("'", "&apos;").replace(">", "&gt;") # pluto: apos instead of quot
 writer.write(data)
 def writexml_pluto(self, writer, indent="", addindent="", newl=""):
 # indent = current indentation
 # addindent = indentation to add to higher levels
 # newl = newline string
 writer.write(indent+"<" + self.tagName)
 attrs = self._get_attributes()
 a_names = sorted(attrs.keys())
 for a_name in a_names:
 writer.write(" %s='" % a_name) # pluto, orig: writer.write(" %s=\"" % a_name)
 _write_data_pluto(writer, attrs[a_name].value)
 writer.write("'") # pluto, orig: writer.write("\"")
 if self.childNodes:
 writer.write(">%s" % (newl))
 for node in self.childNodes:
 node.writexml(writer, indent+addindent, addindent, newl)
 writer.write("%s</%s>%s" % (indent, self.tagName, newl))
 else:
 writer.write("/>%s"%(newl))
History
Date User Action Args
2011年08月30日 18:50:58GPU.Groupsetrecipients: + GPU.Group
2011年08月30日 18:50:58GPU.Groupsetmessageid: <1314730258.77.0.934592208452.issue12863@psf.upfronthosting.co.za>
2011年08月30日 18:50:58GPU.Grouplinkissue12863 messages
2011年08月30日 18:50:57GPU.Groupcreate

AltStyle によって変換されたページ (->オリジナル) /