When using Nim's xmltree module for the first time, I encountered the following peculiarities:
xmltree's $() method [line numbers refer to the resulting XML document]
Also, it has not way to
It would be nice to be able to influence $()'s behavior and have a more "beautified" rsp. consistent output (especially given the fact, that this module is a part of the standard library).
Sample prog
import xmlparser, xmltree
var
outFile: File
errors: seq[string] = @[]
xml = loadXml("blocklist.xml", errors)
if open(outFile, "xmltest.xml", fmWrite):
outFile.write($xml)
outFile.close()
Sample input file (extracts from Mozilla's blocklist.xml):
<?xml version="1.0"?>
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1469801851000">
<emItems>
<emItem blockID="i45" id="{22119944-ED35-4ab1-910B-E619EA06A115}">
<versionRange minVersion="0.1" maxVersion="7.6.1">
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
<versionRange minVersion="8.0a1" maxVersion="*" />
</targetApplication>
</versionRange>
<prefs></prefs>
</emItem>
<emItem blockID="i506" id="/^ext@bettersurfplus/">
<versionRange minVersion="0" maxVersion="*" severity="3"></versionRange>
<prefs></prefs>
</emItem>
<emItem blockID="i1119" id="/^([email protected]|[email protected]|[email protected]|[email protected])$/">
<versionRange minVersion="0" maxVersion="*" severity="3"></versionRange>
<prefs></prefs>
</emItem>
</emItems>
<pluginItems>
<pluginItem blockID="p26">
<match name="name" exp="^Yahoo Application State Plugin$" /><match name="description" exp="^Yahoo Application State Plugin$" /><match name="filename" exp="npYState.dll" /><versionRange >
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
<versionRange minVersion="3.0a1" maxVersion="3.*" />
</targetApplication>
</versionRange>
</pluginItem>
</pluginItems>
<gfxItems>
<gfxBlacklistEntry blockID="g35"><os>WINNT 6.1</os><vendor>0x10de</vendor><devices>
<device>0x0a6c</device>
</devices>
<feature>DIRECT2D</feature><featureStatus>BLOCKED_DRIVER_VERSION</featureStatus><driverVersion>8.17.12.5896</driverVersion><driverVersionComparator>LESS_THAN_OR_EQUAL</driverVersionComparator></gfxBlacklistEntry>
<gfxBlacklistEntry blockID="g1072"><os>All</os><vendor>0x8086</vendor><devices>
<device>0x2a42</device>
<device>0x2e22</device>
<device>0x2e12</device>
<device>0x2e32</device>
<device>0x0046</device>
</devices>
<featureStatus>BLOCKED_DRIVER_VERSION</featureStatus><driverVersion>8.15.10.1892</driverVersion><driverVersionComparator>EQUAL</driverVersionComparator></gfxBlacklistEntry>
</gfxItems>
<certItems>
<certItem issuerName="MIGQMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE2MDQGA1UEAxMtQ09NT0RPIFJTQSBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENB">
<serialNumber>D9UltDPl4XVfSSqQOvdiwQ==</serialNumber>
</certItem>
</certItems>
</blocklist>