[XML-SIG] XmlWriter update

Jeff.Johnson@icn.siemens.com Jeff.Johnson@icn.siemens.com
Thu, 7 Jan 1999 14:29:59 -0500


--0__=fvpHh2vcDJQ5CEBan2fJcjeWZtCMC0eNns393xvSWedcGNOO0Rg9JzLq
Content-type: text/plain; charset=us-ascii
Content-Disposition: inline



I moved some code from xml.dom.HtmlWriter up to the super class
xml.dom.XmlWriter so that it is easier to specify where new lines should be
inserted when writing XML.  I hope you like it and it gets into the XML
package or I'll have to rewrite my code :).  This should be fully backwards
compatible too.

The following is an example of how the change allows us to specify that
'tree' elements should get new lines before and after the start tag and end
tag.  The 'node' element only gets a new line before the start tag.

     nl_dict = {
          'tree':(1,1,1,1),
          'node':(1,0,0,0),
          }
     w = XmlWriter(sys.stdout,nl_dict)
     w.write(doc)

The new xml.dom.writer.py is attached.
(See attached file: writer.py)

Thanks


--0__=fvpHh2vcDJQ5CEBan2fJcjeWZtCMC0eNns393xvSWedcGNOO0Rg9JzLq
Content-type: application/octet-stream; 
	name="writer.py"
Content-Disposition: attachment; filename="writer.py"
Content-transfer-encoding: base64

IiIid3JpdGVyOiB3cml0ZXIvbGluZWFyaXNlciBjbGFzc2VzIGZvciBkdW1waW5nIERPTSB0cmVl
IHRvIGZpbGUuDQoNCiIiIg0KDQpmcm9tIHhtbC5kb20uY29yZSBpbXBvcnQgKg0KZnJvbSB4bWwu
ZG9tLndhbGtlciBpbXBvcnQgV2Fsa2VyDQppbXBvcnQgc3RyaW5nLCByZSwgc3lzDQoNCmZyb20g
eG1sLnV0aWxzIGltcG9ydCBlc2NhcGUNCgkNCg0KY2xhc3MgT3V0cHV0U3RyZWFtOg0KCWRlZiBf
X2luaXRfXyhzZWxmLCBmaWxlKToNCgkJc2VsZi5maWxlID0gZmlsZQ0KCQlzZWxmLm5ld19saW5l
ID0gMQ0KDQoJZGVmIHdyaXRlKHNlbGYsIHMpOg0KCQkjcHJpbnQgJ3dyaXRlJywgYHNgDQoJCXNl
bGYuZmlsZS53cml0ZShyZS5zdWIoJ1xuKycsICdcbicsIHMpKQ0KCQlpZiBzIGFuZCBzWy0xXSA9
PSAnXG4nOg0KCQkJc2VsZi5uZXdfbGluZSA9IDENCgkJZWxzZToNCgkJCXNlbGYubmV3X2xpbmUg
PSAwDQoNCglkZWYgbmV3TGluZShzZWxmKToNCgkJaWYgbm90IHNlbGYubmV3X2xpbmU6DQoJCQlz
ZWxmLndyaXRlKCdcbicpDQoNCglkZWYgX19kZWxfXyhzZWxmKToNCgkJc2VsZi5maWxlLmZsdXNo
KCkNCg0KDQpjbGFzcyBYbWxXcml0ZXIoV2Fsa2VyKToNCg0KCWRlZiBfX2luaXRfXyhzZWxmLCBz
dHJlYW09c3lzLnN0ZG91dCwgbmxfZGljdD17fSk6DQoJCXNlbGYuc3RyZWFtID0gT3V0cHV0U3Ry
ZWFtKHN0cmVhbSkNCgkJc2VsZi5lbXB0aWVzID0gW10NCgkJc2VsZi5zdHJpcCA9IFtdDQoJCXNl
bGYueG1sX3N0eWxlX2VuZHRhZ3MgPSAxDQoJCXNlbGYubmV3bGluZV9iZWZvcmVfc3RhcnQgPSBb
XQ0KCQlzZWxmLm5ld2xpbmVfYWZ0ZXJfc3RhcnQgPSBbXQ0KCQlzZWxmLm5ld2xpbmVfYmVmb3Jl
X2VuZCA9IFtdDQoJCXNlbGYubmV3bGluZV9hZnRlcl9lbmQgPSBbXQ0KCQlzZWxmLm1hcF9hdHRy
ID0gc2VsZi5tYXBfdGFnID0gbGFtYmRhIHg6IHgNCgkJc2VsZi5fc2V0TmV3TGluZXMobmxfZGlj
dCkNCg0KCWRlZiBfc2V0TmV3TGluZXMoc2VsZixubF9kaWN0KToNCgkJZm9yIGssIHYgaW4gbmxf
ZGljdC5pdGVtcygpOg0KCQkJaWYgdlswXToNCgkJCQlzZWxmLm5ld2xpbmVfYmVmb3JlX3N0YXJ0
LmFwcGVuZChrKQ0KCQkJCXNlbGYubmV3bGluZV9iZWZvcmVfc3RhcnQuYXBwZW5kKHN0cmluZy51
cHBlcihrKSkNCgkJCWlmIHZbMV06DQoJCQkJc2VsZi5uZXdsaW5lX2FmdGVyX3N0YXJ0LmFwcGVu
ZChrKQ0KCQkJCXNlbGYubmV3bGluZV9hZnRlcl9zdGFydC5hcHBlbmQoc3RyaW5nLnVwcGVyKGsp
KQ0KCQkJaWYgdlsyXToNCgkJCQlzZWxmLm5ld2xpbmVfYmVmb3JlX2VuZC5hcHBlbmQoaykNCgkJ
CQlzZWxmLm5ld2xpbmVfYmVmb3JlX2VuZC5hcHBlbmQoc3RyaW5nLnVwcGVyKGspKQ0KCQkJaWYg
dlszXToNCgkJCQlzZWxmLm5ld2xpbmVfYWZ0ZXJfZW5kLmFwcGVuZChrKQ0KCQkJCXNlbGYubmV3
bGluZV9hZnRlcl9lbmQuYXBwZW5kKHN0cmluZy51cHBlcihrKSkNCg0KCWRlZiB3cml0ZShzZWxm
LCB4KToNCgkJaWYgdHlwZSh4KSA9PSB0eXBlKCcnKToNCgkJCXNlbGYuc3RyZWFtLndyaXRlKHgp
DQoJCWVsaWYgdHlwZSh4KSBpbiAodHlwZSgoKSksIHR5cGUoW10pKToNCgkJCWZvciB5IGluIHg6
DQoJCQkJc2VsZi53cml0ZSh5KQ0KCQllbHNlOg0KCQkJc2VsZi53YWxrKHgpDQoNCg0KCWRlZiBz
dGFydEVsZW1lbnQoc2VsZiwgZWxlbWVudCkgOg0KCQlhc3NlcnQgZWxlbWVudC5nZXRfbm9kZVR5
cGUoKSA9PSBFTEVNRU5UDQoNCgkJcyA9ICc8JXMnICUgc2VsZi5tYXBfdGFnKGVsZW1lbnQuZ2V0
X25vZGVOYW1lKCkgKQ0KCQkNCgkJZm9yIG5hbWUsIHZhbHVlIGluIGVsZW1lbnQuZ2V0X2F0dHJp
YnV0ZXMoKS5pdGVtcygpOg0KCQkJcyA9IHMgKyAnICVzPSIlcyInICUgKHNlbGYubWFwX2F0dHIo
bmFtZSksDQoJCQkJCSAgICAgIGVzY2FwZSh2YWx1ZS5nZXRfbm9kZVZhbHVlKCkgKSkNCg0KCQlp
ZiBzZWxmLnhtbF9zdHlsZV9lbmR0YWdzIGFuZCBub3QgZWxlbWVudC5nZXRfY2hpbGROb2Rlcygp
Og0KCQkJcyA9IHMgKyAnLz4nDQoJCWVsc2U6DQoJCQlzID0gcyArICc+Jw0KDQoJCWlmIGVsZW1l
bnQuZ2V0X25vZGVOYW1lKCkgaW4gc2VsZi5uZXdsaW5lX2JlZm9yZV9zdGFydDoNCgkJCXNlbGYu
c3RyZWFtLm5ld0xpbmUoKQ0KCQlzZWxmLnN0cmVhbS53cml0ZShzKQ0KCQlpZiBlbGVtZW50Lmdl
dF9ub2RlTmFtZSgpIGluIHNlbGYubmV3bGluZV9hZnRlcl9zdGFydDoNCgkJCXNlbGYuc3RyZWFt
Lm5ld0xpbmUoKQ0KDQoNCglkZWYgZW5kRWxlbWVudChzZWxmLCBlbGVtZW50KToNCgkJYXNzZXJ0
IGVsZW1lbnQuZ2V0X25vZGVUeXBlKCkgPT0gRUxFTUVOVA0KDQoJCXMgPSAnJw0KCQlpZiBlbGVt
ZW50LmdldF9ub2RlTmFtZSgpIGluIHNlbGYuZW1wdGllcyA6DQoJCQlwYXNzDQoJCWVsaWYgbGVu
KGVsZW1lbnQuZ2V0X2NoaWxkTm9kZXMoKSApID09IDAgYW5kIHNlbGYueG1sX3N0eWxlX2VuZHRh
Z3M6DQoJCQlwYXNzDQoJCWVsc2U6DQoJCQlzID0gcyArICc8LyVzPicgJSBzZWxmLm1hcF90YWco
ZWxlbWVudC5nZXRfbm9kZU5hbWUoKSApDQoNCgkJaWYgZWxlbWVudC5nZXRfbm9kZU5hbWUoKSBp
biBzZWxmLm5ld2xpbmVfYmVmb3JlX2VuZDoNCgkJCXNlbGYuc3RyZWFtLm5ld0xpbmUoKQ0KCQlz
ZWxmLnN0cmVhbS53cml0ZShzKQ0KCQlpZiBlbGVtZW50LmdldF9ub2RlTmFtZSgpIGluIHNlbGYu
bmV3bGluZV9hZnRlcl9lbmQ6DQoJCQlzZWxmLnN0cmVhbS5uZXdMaW5lKCkNCg0KDQoJZGVmIGRv
VGV4dChzZWxmLCB0ZXh0X25vZGUpOg0KCQkjaWYgdGV4dF9ub2RlLmdldFBhcmVudE5vZGUoKS50
YWdOYW1lIGluIHNlbGYuc3RyaXA6DQoJCSMJZGF0YSA9IHN0cmluZy5zdHJpcCh0ZXh0X25vZGUu
ZGF0YSkNCgkJI2Vsc2U6DQoJCWRhdGEgPSB0ZXh0X25vZGUuZ2V0X25vZGVWYWx1ZSgpDQoJCXNl
bGYuc3RyZWFtLndyaXRlKGVzY2FwZShkYXRhKSkNCg0KCWRlZiBkb0NvbW1lbnQoc2VsZiwgbm9k
ZSk6DQoJCXNlbGYuc3RyZWFtLndyaXRlKG5vZGUudG94bWwoKSkNCg0KDQpjbGFzcyBYbWxMaW5l
YXJpc2VyKFhtbFdyaXRlcik6DQoNCglkZWYgX19pbml0X18oc2VsZik6DQoJCWltcG9ydCBTdHJp
bmdJTw0KCQlzZWxmLmJ1ZmZlciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkNCgkJWG1sV3JpdGVyLl9f
aW5pdF9fKHNlbGYsIHNlbGYuYnVmZmVyKQ0KDQoJZGVmIGxpbmVhcmlzZShzZWxmLCBub2RlKToN
CgkJc2VsZi53cml0ZShub2RlKQ0KCQlyZXR1cm4gc2VsZi5idWZmZXIuZ2V0dmFsdWUoKQ0KCQ0K
DQpjbGFzcyBIdG1sV3JpdGVyKFhtbFdyaXRlcik6DQoJZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVh
bT1zeXMuc3Rkb3V0KToNCgkJWG1sV3JpdGVyLl9faW5pdF9fKHNlbGYsIHN0cmVhbSkNCgkJc2Vs
Zi5tYXBfYXR0ciA9IHNlbGYubWFwX3RhZyA9IHN0cmluZy51cHBlcg0KCQlzZWxmLnhtbF9zdHls
ZV9lbmR0YWdzID0gMA0KDQoJCXNlbGYuZW1wdGllcyA9IFsNCgkJCSdpbWcnLCAnYnInLCAnaHIn
LCAnaW5jbHVkZScsICdsaScsICdtZXRhJywgJ2lucHV0JywNCgkJCSdJTUcnLCAnQlInLCAnSFIn
LCAnSU5DTFVERScsICdMSScsICdNRVRBJywgJ0lOUFVUJywNCgkJXQ0KCQlzZWxmLnN0cmlwID0g
Ww0KCQkJJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgDQoJCQknbGknLCAnYnIn
LCAncCcsICdhJywgJ3RpdGxlJywgJ2ZvbnQnLA0KCQkJJ0gxJywgJ0gyJywgJ0gzJywgJ0g0Jywg
J0g1JywgJ0g2JywgDQoJCQknTEknLCAnQlInLCAnUCcsICdBJywgJ1RJVExFJywgJ0ZPTlQnLA0K
CQldDQoNCgkJbmxfZGljdCA9IHsNCgkJCSdoZWFkJzogKDEsIDEsIDEsIDEpLA0KCQkJJ2JvZHkn
OiAoMSwgMSwgMSwgMSksDQoJCQkndGl0bGUnOiAoMSwgMSwgMSwgMSksDQoJCQknbWV0YSc6ICgx
LCAxLCAwLCAwKSwNCgkJCSd1bCc6ICgxLCAxLCAxLCAxKSwNCgkJCSdsaSc6ICgxLCAwLCAwLCAw
KSwNCgkJCSdoMSc6ICgxLCAwLCAwLCAxKSwNCgkJCSdoMic6ICgxLCAwLCAwLCAxKSwNCgkJCSdo
Myc6ICgxLCAwLCAwLCAxKSwNCgkJCSdoNCc6ICgxLCAwLCAwLCAxKSwNCgkJCSdoNSc6ICgxLCAw
LCAwLCAxKSwNCgkJCSdoNic6ICgxLCAwLCAwLCAxKSwNCgkJCSdwJzogKDEsIDAsIDAsIDEpLA0K
CQkJJ2JyJzogKDEsIDEsIDAsIDApLA0KCQl9DQoJCQ0KCQlzZWxmLl9zZXROZXdMaW5lcyhubF9k
aWN0KQ0KDQoNCmNsYXNzIEh0bWxMaW5lYXJpc2VyKEh0bWxXcml0ZXIpOg0KDQoJZGVmIF9faW5p
dF9fKHNlbGYpOg0KCQlpbXBvcnQgU3RyaW5nSU8NCgkJc2VsZi5idWZmZXIgPSBTdHJpbmdJTy5T
dHJpbmdJTygpDQoJCUh0bWxXcml0ZXIuX19pbml0X18oc2VsZiwgc2VsZi5idWZmZXIpDQoNCglk
ZWYgbGluZWFyaXNlKHNlbGYsIG5vZGUpOg0KCQlzZWxmLndyaXRlKG5vZGUpDQoJCXJldHVybiBz
ZWxmLmJ1ZmZlci5nZXR2YWx1ZSgpDQoJDQoNCmNsYXNzIEFTUFdyaXRlcihYbWxXcml0ZXIpOg0K
CWRlZiBfX2luaXRfXyhzZWxmLCByZXBfZmlsZSk6DQoJCXNlbGYucmVwX2RpY3QgPSB7fQ0KCQlz
ZWxmLnBhcnNlUmVwRmlsZShyZXBfZmlsZSkNCgkJDQoNCglkZWYgcGFyc2VSZXBGaWxlKHNlbGYs
IHJlcF9maWxlKToNCgkJcyA9ICcnDQoJCWZvciBsIGluIG9wZW4ocmVwX2ZpbGUpLnJlYWRsaW5l
cygpOg0KCQkJaWYgbFswXSA9PSAnPCc6DQoJCQkJcGx1c19iZWZvcmUgPSAwDQoJCQkJcGx1c19h
ZnRlciA9IDANCgkJCQluID0gc3RyaW5nLmluZGV4KGwsICc+JykNCgkJCQl0YWdfbmFtZSA9IGxb
MTpuXQ0KCQkJCXJlcCA9IHN0cmluZy5zdHJpcChsW24rMTpdKQ0KCQkJCWlmIHJlcCBhbmQgcmVw
WzBdID09ICcrJzoNCgkJCQkJcGx1c19iZWZvcmUgPSAxDQoJCQkJCXJlcCA9IHN0cmluZy5zdHJp
cChyZXBbMTpdKQ0KCQkJCWlmIHJlcCBhbmQgcmVwWy0xXSA9PSAnKyc6DQoJCQkJCXBsdXNfYWZ0
ZXIgPSAxDQoJCQkJCXJlcCA9IHN0cmluZy5zdHJpcChyZXBbOi0xXSkNCgkJCQlpZiByZXA6DQoJ
CQkJCXNlbGYucmVwX2RpY3RbdGFnX25hbWVdID0gKHBsdXNfYmVmb3JlLCBwbHVzX2FmdGVyLCBl
dmFsKHJlcCkpDQoJCQkJZWxzZToNCgkJCQkJc2VsZi5yZXBfZGljdFt0YWdfbmFtZV0gPSAocGx1
c19iZWZvcmUsIHBsdXNfYWZ0ZXIsICcnKQ0KCQkJCQkNCg0KCWRlZiBsaW5lYXJpc2VfZWxlbWVu
dChzZWxmLCBlbGVtZW50KSA6DQoJCWFzc2VydCBlbGVtZW50Lk5vZGVUeXBlID09IEVMRU1FTlQN
CgkJcyA9ICcnDQoJCQ0KCQkjIFN0YXJ0IHRhZw0KCQlwbHVzX2JlZm9yZSwgcGx1c19hZnRlciwg
cmVwbCA9IHNlbGYucmVwX2RpY3RbZWxlbWVudC5nZXRUYWdOYW1lKCldDQoNCgkJaWYgcyBhbmQg
c1stMV0gIT0gJ1xuJyBhbmQgcGx1c19iZWZvcmU6DQoJCQlzID0gcyArICdcbicNCgkJcyA9IHMg
KyByZXBsDQoJCWlmIHMgYW5kIHNbLTFdICE9ICdcbicgYW5kIHBsdXNfYWZ0ZXI6DQoJCQlzID0g
cyArICdcbicNCg0KCQlzMSA9ICcnDQoJCWZvciBjaGlsZCBpbiBlbGVtZW50LmdldENoaWxkcmVu
KCk6DQoJCQlpZiBjaGlsZC5Ob2RlVHlwZSBpcyBFTEVNRU5UOg0KCQkJCXMxID0gczEgKyBzZWxm
LmxpbmVhcmlzZV9lbGVtZW50KGNoaWxkKQ0KCQkJZWxpZiBjaGlsZC5Ob2RlVHlwZSBpcyBURVhU
Og0KCQkJCSNzMSA9IHMxICsgZXNjYXBlKGNoaWxkLmRhdGEpDQoJCQkJczEgPSBzMSArIGNoaWxk
LmRhdGENCgkJCWVsc2UgOg0KCQkJCXMxID0gczEgKyBzdHIoY2hpbGQpDQoJCQ0KCQlzID0gcyAr
IHMxDQoNCgkJIyBFbmQgdGFnLg0KCQlwbHVzX2JlZm9yZSwgcGx1c19hZnRlciwgcmVwbCA9IHNl
bGYucmVwX2RpY3RbJy8nICsgZWxlbWVudC5nZXRUYWdOYW1lKCldDQoJCWlmIHMgYW5kIHNbLTFd
ICE9ICdcbicgYW5kIHBsdXNfYmVmb3JlOg0KCQkJcyA9IHMgKyAnXG4nDQoJCXMgPSBzICsgcmVw
bA0KCQlpZiBzIGFuZCBzWy0xXSAhPSAnXG4nIGFuZCBwbHVzX2FmdGVyOg0KCQkJcyA9IHMgKyAn
XG4nDQoNCgkJcmV0dXJuIHMNCg0K

--0__=fvpHh2vcDJQ5CEBan2fJcjeWZtCMC0eNns393xvSWedcGNOO0Rg9JzLq--