<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Python_-_XML_Processing</id>
	<title>Python - XML Processing - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Python_-_XML_Processing"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;action=history"/>
	<updated>2026-05-18T20:44:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;diff=2997&amp;oldid=prev</id>
		<title>PeterHarding at 00:44, 2 April 2009</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;diff=2997&amp;oldid=prev"/>
		<updated>2009-04-02T00:44:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;amp;diff=2997&amp;amp;oldid=1913&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;diff=1913&amp;oldid=prev</id>
		<title>PeterHarding at 04:05, 21 April 2008</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;diff=1913&amp;oldid=prev"/>
		<updated>2008-04-21T04:05:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:05, 21 April 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l623&quot;&gt;Line 623:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 623:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#---------------------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#---------------------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[http://www.performiq.com.au/kb/images/0001.xml Sample data file]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Python]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:XML]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:SOAP]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;diff=1911&amp;oldid=prev</id>
		<title>PeterHarding at 03:59, 21 April 2008</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;diff=1911&amp;oldid=prev"/>
		<updated>2008-04-21T03:59:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:59, 21 April 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l289&quot;&gt;Line 289:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 289:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#----- Recurse node -------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#----- Recurse node -------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: esb:SvcName                    &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;receiveCDPBilling&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: esb:SvcName                    &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;receiveBilling&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: esb:SvcVersion                 1.0&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: esb:SvcVersion                 1.0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: esb:RequestDt                  2007-06-20T11:36:00&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: esb:RequestDt                  2007-06-20T11:36:00&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l298&quot;&gt;Line 298:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 298:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:sourceSystemID             AAE PSft&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:sourceSystemID             AAE PSft&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:sequenceID                 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:sequenceID                 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:notificationEmail          &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;peter.harding&lt;/del&gt;@&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;auspost&lt;/del&gt;.com.au&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:notificationEmail          &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;xxx&lt;/ins&gt;@&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;xxx&lt;/ins&gt;.com.au&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:apAccountNumber            &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;5300001&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:apAccountNumber            &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;5322201&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:cdpAccountNumber           &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2909130&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:cdpAccountNumber           &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2922230&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:cdpCustomerID              &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2845275&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:cdpCustomerID              &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2822275&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:cdpCustomerName            &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;WESTPAC MERCHANT STATIONERY&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:cdpCustomerName            &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;XXXXX&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:orderID                    PH0000000097&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:orderID                    PH0000000097&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:orderDateTime              2003-12-31T12:00:00.000+10:00&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   Node: ns0:orderDateTime              2003-12-31T12:00:00.000+10:00&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;diff=1910&amp;oldid=prev</id>
		<title>PeterHarding: New page: =Using XML Module (xml.dom.utils) to Parse XML=  Here is a bit of code I used recently for pulling apart a chunk of XML (a SOAP request).  &lt;pre&gt; #!/usr/bin/env python #--------------------...</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_XML_Processing&amp;diff=1910&amp;oldid=prev"/>
		<updated>2008-04-21T03:57:32Z</updated>

		<summary type="html">&lt;p&gt;New page: =Using XML Module (xml.dom.utils) to Parse XML=  Here is a bit of code I used recently for pulling apart a chunk of XML (a SOAP request).  &amp;lt;pre&amp;gt; #!/usr/bin/env python #--------------------...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Using XML Module (xml.dom.utils) to Parse XML=&lt;br /&gt;
&lt;br /&gt;
Here is a bit of code I used recently for pulling apart a chunk of XML (a SOAP request).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
#--------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import re&lt;br /&gt;
import sys&lt;br /&gt;
import getopt&lt;br /&gt;
import pprint&lt;br /&gt;
import types&lt;br /&gt;
&lt;br /&gt;
import xml.dom.minidom&lt;br /&gt;
&lt;br /&gt;
import ebdm&lt;br /&gt;
&lt;br /&gt;
# from xml.dom.utils import FileReader&lt;br /&gt;
from string import join, split    &lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Read in a DOM instance, convert it to a Python object&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
__version__    = &amp;#039;1.0.0&amp;#039;&lt;br /&gt;
&lt;br /&gt;
debug_flg      = False&lt;br /&gt;
verbose_flg    = False&lt;br /&gt;
&lt;br /&gt;
pp             = pprint.PrettyPrinter(indent=3)&lt;br /&gt;
regex          = re.compile(&amp;quot;\\n *&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
filename       = &amp;#039;0001.xml&amp;#039;&lt;br /&gt;
&lt;br /&gt;
service        = None&lt;br /&gt;
cdp            = None&lt;br /&gt;
customer       = None&lt;br /&gt;
order          = None&lt;br /&gt;
&lt;br /&gt;
in_cdp         = False&lt;br /&gt;
in_order       = False&lt;br /&gt;
in_address     = False&lt;br /&gt;
&lt;br /&gt;
no_orders      = 0&lt;br /&gt;
&lt;br /&gt;
curr_obj_type  = None&lt;br /&gt;
obj            = None&lt;br /&gt;
&lt;br /&gt;
hdr_flg        = {}&lt;br /&gt;
&lt;br /&gt;
#==========================================================================&lt;br /&gt;
&lt;br /&gt;
class Obj:&lt;br /&gt;
   pass&lt;br /&gt;
&lt;br /&gt;
   def __init__(self):&lt;br /&gt;
      pass&lt;br /&gt;
&lt;br /&gt;
   def __str__(self):&lt;br /&gt;
      s = &amp;#039;&amp;#039;&lt;br /&gt;
      for key in self.__dict__:&lt;br /&gt;
         x = getattr(self, key)&lt;br /&gt;
         s += &amp;quot;%s -&amp;gt; %s\n&amp;quot; % (key, x)&lt;br /&gt;
      return s&lt;br /&gt;
&lt;br /&gt;
#==========================================================================&lt;br /&gt;
&lt;br /&gt;
class Service:&lt;br /&gt;
   pass&lt;br /&gt;
&lt;br /&gt;
   def __init__(self):&lt;br /&gt;
      pass&lt;br /&gt;
&lt;br /&gt;
#==========================================================================&lt;br /&gt;
&lt;br /&gt;
class CDP:&lt;br /&gt;
   pass&lt;br /&gt;
&lt;br /&gt;
   def __init__(self):&lt;br /&gt;
      self.customers = []&lt;br /&gt;
&lt;br /&gt;
#==========================================================================&lt;br /&gt;
&lt;br /&gt;
customer_attr = [&lt;br /&gt;
   &amp;#039;apAccountNumber&amp;#039;,&lt;br /&gt;
   &amp;#039;cdpAccountNumber&amp;#039;,&lt;br /&gt;
   &amp;#039;cdpCustomerID&amp;#039;,&lt;br /&gt;
   &amp;#039;cdpCustomerName&amp;#039;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
class Customer:&lt;br /&gt;
   pass&lt;br /&gt;
&lt;br /&gt;
   def __init__(self):&lt;br /&gt;
      self.orders = []&lt;br /&gt;
&lt;br /&gt;
   def dump_header(self, fd):&lt;br /&gt;
      fd.write(&amp;quot;[Customer],&amp;quot;)&lt;br /&gt;
      for i in range(len(customer_attr)):&lt;br /&gt;
         fd.write(&amp;quot;%s,&amp;quot; % customer_attr[i])&lt;br /&gt;
      fd.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
   def dump_data(self, fd):&lt;br /&gt;
      for i in range(len(customer_attr)):&lt;br /&gt;
         fd.write(&amp;quot;%s,&amp;quot; % getattr(self, customer_attr[i]))&lt;br /&gt;
      fd.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#==========================================================================&lt;br /&gt;
&lt;br /&gt;
order_attr = [&lt;br /&gt;
   &amp;#039;orderID&amp;#039;,&lt;br /&gt;
   &amp;#039;orderStatus&amp;#039;,&lt;br /&gt;
   &amp;#039;orderDateTime&amp;#039;,&lt;br /&gt;
   &amp;#039;readyDateTime&amp;#039;,&lt;br /&gt;
   &amp;#039;invoiceDateTime&amp;#039;,&lt;br /&gt;
   &amp;#039;numberOfItems&amp;#039;,&lt;br /&gt;
   &amp;#039;workCentreID&amp;#039;,&lt;br /&gt;
   &amp;#039;customerCostCentre&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef1&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef1Desc&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef2&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef2Desc&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef3&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef3Desc&amp;#039;,&lt;br /&gt;
   &amp;#039;otherCustomerRef&amp;#039;,&lt;br /&gt;
   &amp;#039;otherCustomerRefDesc&amp;#039;,&lt;br /&gt;
   &amp;#039;address1&amp;#039;,&lt;br /&gt;
   &amp;#039;address2&amp;#039;,&lt;br /&gt;
   &amp;#039;address3&amp;#039;,&lt;br /&gt;
   &amp;#039;suburb&amp;#039;,&lt;br /&gt;
   &amp;#039;state&amp;#039;,&lt;br /&gt;
   &amp;#039;postcode&amp;#039;,&lt;br /&gt;
   &amp;#039;entryWeight&amp;#039;,&lt;br /&gt;
   &amp;#039;cubedWeight&amp;#039;,&lt;br /&gt;
   &amp;#039;actualWeight&amp;#039;,&lt;br /&gt;
   &amp;#039;height&amp;#039;,&lt;br /&gt;
   &amp;#039;length&amp;#039;,&lt;br /&gt;
   &amp;#039;width&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceType&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceArea&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceCodeSet&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceCode&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceDesc&amp;#039;,&lt;br /&gt;
   &amp;#039;apProductCode&amp;#039;,&lt;br /&gt;
   &amp;#039;transactionID&amp;#039;,&lt;br /&gt;
   &amp;#039;transactionType&amp;#039;,&lt;br /&gt;
   &amp;#039;chargeType&amp;#039;,&lt;br /&gt;
   &amp;#039;chargeCode&amp;#039;,&lt;br /&gt;
   &amp;#039;chargeCodeDesc&amp;#039;,&lt;br /&gt;
   &amp;#039;priceCharged&amp;#039;,&lt;br /&gt;
   &amp;#039;taxCode&amp;#039;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
attr = {&lt;br /&gt;
   &amp;#039;orderID&amp;#039;                       : &amp;#039;Order&amp;#039;,&lt;br /&gt;
   &amp;#039;orderStatus&amp;#039;                   : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;orderDateTime&amp;#039;                 : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;readyDateTime&amp;#039;                 : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;invoiceDateTime&amp;#039;               : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;numberOfItems&amp;#039;                 : &amp;#039;Order&amp;#039;,&lt;br /&gt;
   &amp;#039;workCentreID&amp;#039;                  : &amp;#039;Order&amp;#039;,&lt;br /&gt;
   &amp;#039;customerCostCentre&amp;#039;            : &amp;#039;Order&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;orderRef1&amp;#039;                     : &amp;#039;CustRef&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef1Desc&amp;#039;                 : &amp;#039;CustRef&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef2&amp;#039;                     : &amp;#039;CustRef&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef2Desc&amp;#039;                 : &amp;#039;CustRef&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef3&amp;#039;                     : &amp;#039;CustRef&amp;#039;,&lt;br /&gt;
   &amp;#039;orderRef3Desc&amp;#039;                 : &amp;#039;CustRef&amp;#039;,&lt;br /&gt;
   &amp;#039;otherCustomerRef&amp;#039;              : &amp;#039;CustRef&amp;#039;,&lt;br /&gt;
   &amp;#039;otherCustomerRefDesc&amp;#039;          : &amp;#039;CustRef&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;address1&amp;#039;                      : &amp;#039;Address&amp;#039;,&lt;br /&gt;
   &amp;#039;address2&amp;#039;                      : &amp;#039;Address&amp;#039;,&lt;br /&gt;
   &amp;#039;address3&amp;#039;                      : &amp;#039;Address&amp;#039;,&lt;br /&gt;
   &amp;#039;suburb&amp;#039;                        : &amp;#039;Address&amp;#039;,&lt;br /&gt;
   &amp;#039;postcode&amp;#039;                      : &amp;#039;Address&amp;#039;,&lt;br /&gt;
   &amp;#039;state&amp;#039;                         : &amp;#039;Address&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;entryWeight&amp;#039;                   : &amp;#039;Weight&amp;#039;,&lt;br /&gt;
   &amp;#039;cubedWeight&amp;#039;                   : &amp;#039;Weight&amp;#039;,&lt;br /&gt;
   &amp;#039;actualWeight&amp;#039;                  : &amp;#039;Weight&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;height&amp;#039;                        : &amp;#039;Dimension&amp;#039;,&lt;br /&gt;
   &amp;#039;length&amp;#039;                        : &amp;#039;Dimension&amp;#039;,&lt;br /&gt;
   &amp;#039;width&amp;#039;                         : &amp;#039;Dimension&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;schedPickUpDateTime&amp;#039;           : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;pickUpTimeliness&amp;#039;              : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;schedDeliveryDateTime&amp;#039;         : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;deliveryTimeliness&amp;#039;            : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;pickupSignatureRequired&amp;#039;       : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;pickupSignatureReceived&amp;#039;       : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;actualPickUpDateTime&amp;#039;          : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;latePickUpIndicator&amp;#039;           : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;deliverySignatureRequired&amp;#039;     : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;deliverySignatureReceived&amp;#039;     : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;actualDeliveryDateTime&amp;#039;        : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
   &amp;#039;lateDeliveryIndicator&amp;#039;         : &amp;#039;IGNORE&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;serviceType&amp;#039;                   : &amp;#039;Service&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceArea&amp;#039;                   : &amp;#039;Service&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceCodeSet&amp;#039;                : &amp;#039;Service&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceCode&amp;#039;                   : &amp;#039;Service&amp;#039;,&lt;br /&gt;
   &amp;#039;serviceDesc&amp;#039;                   : &amp;#039;Service&amp;#039;,&lt;br /&gt;
   &amp;#039;apProductCode&amp;#039;                 : &amp;#039;Service&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;transactionID&amp;#039;                 : &amp;#039;Charge&amp;#039;,&lt;br /&gt;
   &amp;#039;transactionType&amp;#039;               : &amp;#039;Charge&amp;#039;,&lt;br /&gt;
   &amp;#039;chargeType&amp;#039;                    : &amp;#039;Charge&amp;#039;,&lt;br /&gt;
   &amp;#039;chargeCode&amp;#039;                    : &amp;#039;Charge&amp;#039;,&lt;br /&gt;
   &amp;#039;chargeCodeDesc&amp;#039;                : &amp;#039;Charge&amp;#039;,&lt;br /&gt;
   &amp;#039;priceCharged&amp;#039;                  : &amp;#039;Charge&amp;#039;,&lt;br /&gt;
   &amp;#039;taxCode&amp;#039;                       : &amp;#039;Charge&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
objs = {&lt;br /&gt;
   &amp;#039;Order&amp;#039;     : [],&lt;br /&gt;
   &amp;#039;CustRef&amp;#039;   : [],&lt;br /&gt;
   &amp;#039;Address&amp;#039;   : [],&lt;br /&gt;
   &amp;#039;Weight&amp;#039;    : [],&lt;br /&gt;
   &amp;#039;Dimension&amp;#039; : [],&lt;br /&gt;
   &amp;#039;Service&amp;#039;   : [],&lt;br /&gt;
   &amp;#039;Charge&amp;#039;    : []&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Order:&lt;br /&gt;
   orderID                    = None&lt;br /&gt;
   orderStatus                = None&lt;br /&gt;
   orderDateTime              = None&lt;br /&gt;
   readyDateTime              = None&lt;br /&gt;
   invoiceDateTime            = None&lt;br /&gt;
   numberOfItems              = None&lt;br /&gt;
   workCentreID               = None&lt;br /&gt;
   customerCostCentre         = None&lt;br /&gt;
   otherCustomerRef           = None&lt;br /&gt;
   otherCustomerRefDesc       = None&lt;br /&gt;
   orderRef1                  = None&lt;br /&gt;
   orderRef1Desc              = None&lt;br /&gt;
   orderRef2                  = None&lt;br /&gt;
   orderRef2Desc              = None&lt;br /&gt;
   orderRef3                  = None&lt;br /&gt;
   orderRef3Desc              = None&lt;br /&gt;
   address1                   = None&lt;br /&gt;
   address2                   = None&lt;br /&gt;
   address3                   = None&lt;br /&gt;
   suburb                     = None&lt;br /&gt;
   postcode                   = None&lt;br /&gt;
   state                      = None&lt;br /&gt;
   entryWeight                = None&lt;br /&gt;
   cubedWeight                = None&lt;br /&gt;
   actualWeight               = None&lt;br /&gt;
   height                     = None&lt;br /&gt;
   length                     = None&lt;br /&gt;
   width                      = None&lt;br /&gt;
   serviceType                = None&lt;br /&gt;
   serviceArea                = None&lt;br /&gt;
   serviceCodeSet             = None&lt;br /&gt;
   serviceCode                = None&lt;br /&gt;
   serviceDesc                = None&lt;br /&gt;
   apProductCode              = None&lt;br /&gt;
   transactionID              = None&lt;br /&gt;
   transactionType            = None&lt;br /&gt;
   chargeType                 = None&lt;br /&gt;
   chargeCode                 = None&lt;br /&gt;
   chargeCodeDesc             = None&lt;br /&gt;
   priceCharged               = None&lt;br /&gt;
   taxCode                    = None&lt;br /&gt;
&lt;br /&gt;
   def __init__(self):&lt;br /&gt;
      pass&lt;br /&gt;
&lt;br /&gt;
   def dump_header(self, fd):&lt;br /&gt;
      for i in range(len(order_attr)):&lt;br /&gt;
         fd.write(&amp;quot;%s,&amp;quot; % order_attr[i])&lt;br /&gt;
      fd.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
   def dump_data(self, fd):&lt;br /&gt;
      for i in range(len(order_attr)):&lt;br /&gt;
         fd.write(&amp;quot;%s,&amp;quot; % getattr(self, order_attr[i]))&lt;br /&gt;
      fd.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#----- Recurse node -------------------------------------------------------&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  Node: esb:SvcName                    receiveCDPBilling&lt;br /&gt;
  Node: esb:SvcVersion                 1.0&lt;br /&gt;
  Node: esb:RequestDt                  2007-06-20T11:36:00&lt;br /&gt;
  Node: esb:ComponentID                Test&lt;br /&gt;
  Node: esb:ComponentName              Test Application&lt;br /&gt;
  Node: ns0:cdpID                      AaE&lt;br /&gt;
  Node: ns0:consortiumID               APCBE&lt;br /&gt;
  Node: ns0:sourceSystemID             AAE PSft&lt;br /&gt;
  Node: ns0:sequenceID                 1&lt;br /&gt;
  Node: ns0:notificationEmail          peter.harding@auspost.com.au&lt;br /&gt;
  Node: ns0:apAccountNumber            5300001&lt;br /&gt;
  Node: ns0:cdpAccountNumber           2909130&lt;br /&gt;
  Node: ns0:cdpCustomerID              2845275&lt;br /&gt;
  Node: ns0:cdpCustomerName            WESTPAC MERCHANT STATIONERY&lt;br /&gt;
  Node: ns0:orderID                    PH0000000097&lt;br /&gt;
  Node: ns0:orderDateTime              2003-12-31T12:00:00.000+10:00&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def capture(node_name, value):&lt;br /&gt;
   global service, cdp, customer, order&lt;br /&gt;
   global in_cdp, in_customer, in_order, no_orders&lt;br /&gt;
   global obj&lt;br /&gt;
&lt;br /&gt;
   if not service:&lt;br /&gt;
      service = Service()&lt;br /&gt;
&lt;br /&gt;
   if not cdp:&lt;br /&gt;
      cdp = CDP()&lt;br /&gt;
&lt;br /&gt;
   if re.match(&amp;#039;esb:&amp;#039;, node_name):&lt;br /&gt;
      (name, cnt) = re.subn(&amp;#039;esb:&amp;#039;, &amp;#039;&amp;#039;, node_name)&lt;br /&gt;
      setattr(service, name, value)&lt;br /&gt;
      print &amp;quot;service.__dict__ -&amp;gt; &amp;#039;%s&amp;#039;&amp;quot; % service.__dict__&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
   if re.match(&amp;#039;ns0:&amp;#039;, node_name):&lt;br /&gt;
      (name, cnt) = re.subn(&amp;#039;ns0:&amp;#039;, &amp;#039;&amp;#039;, node_name)&lt;br /&gt;
&lt;br /&gt;
      print &amp;quot;&amp;gt;&amp;gt;&amp;gt; name : %s&amp;quot; % name&lt;br /&gt;
&lt;br /&gt;
      if re.match(&amp;#039;apAccountNumber&amp;#039;, name):&lt;br /&gt;
         in_cdp      = False&lt;br /&gt;
         in_customer = True&lt;br /&gt;
         in_order    = False&lt;br /&gt;
&lt;br /&gt;
         customer    = Customer()&lt;br /&gt;
&lt;br /&gt;
         print &amp;quot;New customer!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         cdp.customers.append(customer)&lt;br /&gt;
         setattr(customer, name, value)&lt;br /&gt;
         # print customer.__dict__&lt;br /&gt;
         return&lt;br /&gt;
&lt;br /&gt;
      if re.match(&amp;#039;orderID&amp;#039;, name):&lt;br /&gt;
         in_cdp      = False&lt;br /&gt;
         in_customer = False&lt;br /&gt;
         in_order    = True&lt;br /&gt;
         no_orders += 1&lt;br /&gt;
&lt;br /&gt;
         order    = Order()&lt;br /&gt;
         obj      = Obj()&lt;br /&gt;
         obj.type = &amp;#039;Order&amp;#039;&lt;br /&gt;
&lt;br /&gt;
         objs[&amp;#039;Order&amp;#039;].append(obj)&lt;br /&gt;
&lt;br /&gt;
         setattr(obj, name, value)&lt;br /&gt;
         customer.orders.append(order)&lt;br /&gt;
         setattr(order, name, value)&lt;br /&gt;
         # print order.__dict__&lt;br /&gt;
         return&lt;br /&gt;
&lt;br /&gt;
      if re.match(&amp;#039;cdpID&amp;#039;, name):&lt;br /&gt;
         in_cdp = True&lt;br /&gt;
         setattr(cdp, name, value)&lt;br /&gt;
         # print cdp.__dict__&lt;br /&gt;
         return&lt;br /&gt;
&lt;br /&gt;
      if in_cdp:&lt;br /&gt;
         setattr(cdp, name, value)&lt;br /&gt;
         print &amp;quot;cdp.__dict__ -&amp;gt; &amp;#039;%s&amp;#039;&amp;quot; % cdp.__dict__&lt;br /&gt;
         return&lt;br /&gt;
&lt;br /&gt;
      if in_customer:&lt;br /&gt;
         setattr(customer, name, value)&lt;br /&gt;
         print customer.__dict__&lt;br /&gt;
         return&lt;br /&gt;
&lt;br /&gt;
      if in_order:&lt;br /&gt;
         setattr(order, name, value)&lt;br /&gt;
         type = attr[name]&lt;br /&gt;
         if type == obj.type:&lt;br /&gt;
            # add this attribute.&lt;br /&gt;
            setattr(obj, name, value)&lt;br /&gt;
         else:&lt;br /&gt;
            # new object - saveold one and create new one&lt;br /&gt;
            if type == &amp;#039;IGNORE&amp;#039;:&lt;br /&gt;
               return&lt;br /&gt;
            obj      = Obj()&lt;br /&gt;
            obj.type = type&lt;br /&gt;
            objs[type].append(obj)&lt;br /&gt;
&lt;br /&gt;
         # print order.__dict__&lt;br /&gt;
         return&lt;br /&gt;
&lt;br /&gt;
#----- Recurse node -------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def recurse_node(node):&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
      i is either an IntType or a LambdaType, m is &lt;br /&gt;
      either an instance based on of myType (or a&lt;br /&gt;
      sub-type of myType or None). Any&lt;br /&gt;
      parameter can have None as a valid type&lt;br /&gt;
      unless it is disallowed via a require block.&lt;br /&gt;
      Both arguments are required.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   # print &amp;quot;[recurse_node]  START&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   if  node.__dict__.has_key(&amp;#039;nodeName&amp;#039;):&lt;br /&gt;
      node_name = node.nodeName&lt;br /&gt;
   else:&lt;br /&gt;
      # print &amp;quot;Node name not defined&amp;quot;&lt;br /&gt;
      node_name = False&lt;br /&gt;
&lt;br /&gt;
   if  node.__dict__.has_key(&amp;#039;childNodes&amp;#039;):&lt;br /&gt;
      nodes = node.childNodes&lt;br /&gt;
   else:&lt;br /&gt;
      nodes = None&lt;br /&gt;
      # display_node(node)&lt;br /&gt;
&lt;br /&gt;
   if not nodes:&lt;br /&gt;
      if  node.__dict__.has_key(&amp;#039;nodeValue&amp;#039;):&lt;br /&gt;
         value    = node.nodeValue&lt;br /&gt;
         matched  = regex.search(value)&lt;br /&gt;
         if matched:&lt;br /&gt;
            value = re.sub(r&amp;#039; *\n *&amp;#039;, &amp;#039;&amp;#039;, value)&lt;br /&gt;
&lt;br /&gt;
      if verbose_flg: print &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Bogus text node!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
   if not node_name:&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
   no_nodes = len(nodes)&lt;br /&gt;
&lt;br /&gt;
   if no_nodes == 1:&lt;br /&gt;
      if nodes[0].nodeName == &amp;#039;#text&amp;#039;:&lt;br /&gt;
         value = nodes[0].nodeValue&lt;br /&gt;
&lt;br /&gt;
      if verbose_flg: print &amp;quot;=====  Node: %-30s %s&amp;quot; % (node_name, value)&lt;br /&gt;
&lt;br /&gt;
      capture(node_name, value)&lt;br /&gt;
&lt;br /&gt;
   else:&lt;br /&gt;
      if verbose_flg: print &amp;quot;@@@@@  Node: %-30s&amp;quot; % node_name&lt;br /&gt;
&lt;br /&gt;
      for node in nodes:&lt;br /&gt;
         if not display_node(node):&lt;br /&gt;
            continue&lt;br /&gt;
         recurse_node(node)&lt;br /&gt;
&lt;br /&gt;
#----- Display node -------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def display_node(node):&lt;br /&gt;
   # print &amp;quot;[display_node]  ENTER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   if  node.nodeName == &amp;#039;#text&amp;#039;:&lt;br /&gt;
      if  node.__dict__.has_key(&amp;#039;nodeValue&amp;#039;):&lt;br /&gt;
         value = node.nodeValue&lt;br /&gt;
         # print &amp;quot;[display_node]  Node Value:  [%s]&amp;quot; % value&lt;br /&gt;
         matched = regex.search(value)&lt;br /&gt;
         if matched:&lt;br /&gt;
            value = re.sub(r&amp;#039;\n *&amp;#039;, &amp;#039;N/A&amp;#039;, value)&lt;br /&gt;
            # print &amp;quot;[display_node]  RETURN False - %s&amp;quot; % value&lt;br /&gt;
            return False&lt;br /&gt;
         # print &amp;quot;[display_node]  Node Name:  [%s]&amp;quot; % node.nodeName&lt;br /&gt;
   else:&lt;br /&gt;
      pass&lt;br /&gt;
      # print &amp;quot;pass...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   if verbose_flg:&lt;br /&gt;
      print &amp;quot;===== node =====================================================&amp;quot;&lt;br /&gt;
      print &amp;quot;Node Name:  [%s]&amp;quot; % node.nodeName&lt;br /&gt;
      print &amp;quot;----------------------------------------------------------------&amp;quot;&lt;br /&gt;
      pp.pprint(node.__dict__)&lt;br /&gt;
      print &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   # print &amp;quot;[display_node]  RETURN True&amp;quot;&lt;br /&gt;
   return True&lt;br /&gt;
&lt;br /&gt;
#----- Usage --------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def clean(filename):&lt;br /&gt;
   ifd   = open(filename, &amp;#039;r&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
   data = ifd.read()&lt;br /&gt;
&lt;br /&gt;
   data = data.replace(chr(0240), &amp;#039;&amp;#039;)&lt;br /&gt;
   data = data.replace(chr(0302), &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
   out  = open(&amp;#039;parse.xml&amp;#039;, &amp;#039;w&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
   out.write(data)&lt;br /&gt;
&lt;br /&gt;
   ifd.close()&lt;br /&gt;
   out.close()&lt;br /&gt;
&lt;br /&gt;
#----- Usage --------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def usage():&lt;br /&gt;
   USAGE = &amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
&lt;br /&gt;
      $ ./parse_order.py [-f &amp;lt;file&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   sys.stderr.write(USAGE)&lt;br /&gt;
&lt;br /&gt;
#----- Main ---------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def parse(filename):&lt;br /&gt;
   clean(filename)  # -&amp;gt; parse.xml&lt;br /&gt;
&lt;br /&gt;
   dom_obj =  xml.dom.minidom.parse(&amp;#039;parse.xml&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
   #-----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   # print &amp;quot;===== dom_obj.__dict__ =========================================\n&amp;quot;&lt;br /&gt;
   # pp.pprint(dom_obj.__dict__)&lt;br /&gt;
   # print &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   # print &amp;quot;===== dom_obj.childNodes: ======================================\n&amp;quot;&lt;br /&gt;
   # pp.pprint(dom_obj.childNodes[0].__dict__)&lt;br /&gt;
   # print &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   recurse_node(dom_obj.childNodes[0])&lt;br /&gt;
&lt;br /&gt;
   print &amp;#039;Processed %d orders&amp;#039; % no_orders&lt;br /&gt;
&lt;br /&gt;
   if debug_flg:&lt;br /&gt;
      ofd = sys.stdout&lt;br /&gt;
   else:&lt;br /&gt;
      ofd = open(&amp;#039;orders.csv&amp;#039;, &amp;#039;w&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
   Customer().dump_header(ofd)&lt;br /&gt;
&lt;br /&gt;
   for customer in cdp.customers:&lt;br /&gt;
      print &amp;quot;customer.__dict__ -&amp;gt; &amp;#039;%s&amp;#039;&amp;quot; % customer.__dict__&lt;br /&gt;
      customer.dump_data(ofd)&lt;br /&gt;
      Order().dump_header(ofd)&lt;br /&gt;
      for order in customer.orders:&lt;br /&gt;
         order.dump_data(ofd)&lt;br /&gt;
&lt;br /&gt;
   ofd.close()&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def dump():&lt;br /&gt;
   for obj_type in objs.keys():&lt;br /&gt;
      print obj_type&lt;br /&gt;
      ofp = open(&amp;#039;dat/%s/%s.dat&amp;#039; % (cdp.cdpID, obj_type), &amp;#039;w&amp;#039;)&lt;br /&gt;
      obj_list = objs[obj_type]&lt;br /&gt;
      for obj in obj_list:&lt;br /&gt;
         if not hdr_flg.has_key(obj_type):&lt;br /&gt;
            hdr_flg[obj_type] = 1&lt;br /&gt;
            hdr = &amp;#039;&amp;#039;&lt;br /&gt;
            for attr in obj.__dict__.keys():&lt;br /&gt;
               if (attr != &amp;#039;type&amp;#039;):&lt;br /&gt;
                  hdr += &amp;#039;%s,&amp;#039; % attr&lt;br /&gt;
            hdr += &amp;#039;\n&amp;#039;&lt;br /&gt;
            ofp.write(hdr)&lt;br /&gt;
         line = &amp;#039;&amp;#039;&lt;br /&gt;
         for attr in obj.__dict__.keys():&lt;br /&gt;
            val = getattr(obj, attr)&lt;br /&gt;
            if (val != obj_type):&lt;br /&gt;
               line += &amp;#039;&amp;quot;%s&amp;quot;,&amp;#039; % getattr(obj, attr)&lt;br /&gt;
         line += &amp;#039;\n&amp;#039;&lt;br /&gt;
         ofp.write(line)&lt;br /&gt;
&lt;br /&gt;
         print obj&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def usage():&lt;br /&gt;
   USAGE = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
     Usage:&lt;br /&gt;
     &lt;br /&gt;
       $ dt.py&lt;br /&gt;
    &lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   sys.stderr.write(USAGE)&lt;br /&gt;
   &lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def main(argv):&lt;br /&gt;
   global debug_flg&lt;br /&gt;
   global verbose_flg&lt;br /&gt;
   global filename&lt;br /&gt;
   global pp&lt;br /&gt;
&lt;br /&gt;
   #----- Process command line arguments ----------------------------&lt;br /&gt;
&lt;br /&gt;
   try:&lt;br /&gt;
      opts, args = getopt.getopt(argv, &amp;quot;dhf:sv&amp;quot;, [&amp;quot;debug&amp;quot;, &amp;quot;help&amp;quot;, &amp;quot;file=&amp;quot;, &amp;quot;stdout&amp;quot;, &amp;quot;verbose&amp;quot;])&lt;br /&gt;
   except getopt.GetoptError:&lt;br /&gt;
      usage()&lt;br /&gt;
      sys.exit(2)&lt;br /&gt;
   else:&lt;br /&gt;
      for opt, arg in opts:&lt;br /&gt;
         if opt in (&amp;quot;-d&amp;quot;, &amp;quot;--debug&amp;quot;):&lt;br /&gt;
            debug_flg = True&lt;br /&gt;
         elif opt in (&amp;quot;-h&amp;quot;, &amp;quot;--help&amp;quot;):&lt;br /&gt;
            usage()&lt;br /&gt;
            sys.exit(0)&lt;br /&gt;
         elif opt in (&amp;quot;-f&amp;quot;, &amp;quot;--file&amp;quot;):&lt;br /&gt;
            filename = arg&lt;br /&gt;
         elif opt in (&amp;quot;-s&amp;quot;, &amp;quot;--stdout&amp;quot;):&lt;br /&gt;
            stdout_flg = True&lt;br /&gt;
         elif opt in (&amp;quot;-v&amp;quot;, &amp;quot;--verbose&amp;quot;):&lt;br /&gt;
            verbose_flg = True&lt;br /&gt;
&lt;br /&gt;
   parse(filename)&lt;br /&gt;
   dump()&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
   main(sys.argv[1:])&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
</feed>