Hi, This is my first try at XML with Python, and though I tried to read on the web, I'm unable to traverse a DOM tree, as my top element seems to be DOCUMENT_NODE and I cannot find a way to get to the nodes below it.
Below is a sample data, script and execution. Could you point to where I'm doing wrong ? Thanks, Ron. ________________________________ $ python -u xml_parse.py node: <xml.dom.minidom.DocumentType instance at 0x00DE25A8> dom2.nodeType: 9 dom2.nodeName: #document node is DOCUMENT_NODE: <xml.dom.minidom.DocumentType instance at 0x00DE25A8> node: <DOM Element: database at 0xde2698> dom2.nodeType: 9 dom2.nodeName: #document node is DOCUMENT_NODE: <DOM Element: database at 0xde2698> ('dom2._get_childNodes():', [<xml.dom.minidom.DocumentType instance at 0x00DE25A8>, <DOM Element: database at 0xde2698>]) Traceback (most recent call last): File "xml_parse.py", line 26, in <module> print("child_nodes._get_childNodes():",child_nodes._get_childNodes()) AttributeError: 'NodeList' object has no attribute '_get_childNodes' $ cat xml_parse.py #!/usr/bin/env python from xml.dom.minidom import parse, parseString xml_file_path ='example.xml' in_xml = open(xml_file_path) tmp = in_xml.read() doctype_loc = tmp.rfind("<!DOCTYPE") open_squere_par_loc = tmp.find("[",doctype_loc) first_part = tmp[:open_squere_par_loc + 1] close_squere_par_loc = tmp.find("]>",doctype_loc) last_part = tmp[close_squere_par_loc:] xml_string = "%s%s" % (first_part, last_part) dom2 = parseString(xml_string) for node in dom2.childNodes: print "node:",node print "dom2.nodeType:",dom2.nodeType print "dom2.nodeName:",dom2.nodeName if dom2.nodeType == dom2.ELEMENT_NODE: print "node is ELEMENT_NODE:",node elif dom2.nodeType == dom2.DOCUMENT_NODE: print "node is DOCUMENT_NODE:",node child_nodes = dom2._get_childNodes() print("dom2._get_childNodes():",dom2._get_childNodes()) print("child_nodes._get_childNodes():",child_nodes._get_childNodes()) dom2.unlink() $ cat example.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE database [ <!ELEMENT database (DbPortCharacteristic*, DbDpmPersonality*, DbHostMode*, DbGlobalSettings*, DbSimulatedDisk*, DbUserPermission*, DbUser*, DbUserSession*, DbUserGroup*, DbLicenseKey*, DbObjectBase*, DbFolderQueryMetadata*, DbFolder*, DbVDevAccessPermissions*, DbApplicationType*, DbPReserve*, DbVDevAgentBroadcastMsg*, DbVDev*, DbConsistencyGroup*, DbVolume*, DbPit*, DbView*, DbStripeSegment*, DbPool*, DbStripe*, DbScsiAddress*, DbDisk*, DbHbaAccessPath*, DbHba*, DbSubnodeGroupInfo*, DbSubnodeGroup*, DbHbaGroup*, DbPrRequest*, DbDomain*, DbSvmInfo*, DbPermTemplate*, DbPersonality*, DbMessageGroup*, DbJobBase*, DbMmJob*, DbMmRJob*, DbMcJob*, DbMcRJob*, DbGroupBase*, DbMmGroup*, DbMmRGroup*, DbMcGroup*, DbMcRGroup*, DbLoadBalanceNode*, DbBrokenMmJobInfo*, DbSmGroup*, DbSmJob*, DbDestVolInfo*, DbJobDestPermission*, DbVSSSnapshotSet*, DbVSSSnapshot*, DbPoolAlertData*)> <!ELEMENT DbPortCharacteristic (m_id, m_PortAddress, m_PortNumber, m_MtuActive, m_MtuSupported, m_SpeedCurrent, m_SpeedMax, m_ScsiRoleInfo, m_FCPortTypeInfo, m_InterfaceProtocolType, m_PortStatus, m_HbaGroup)> <!ELEMENT m_id (#PCDATA)> ]> <database> <DbPortCharacteristic id="9429"> <m_id>2</m_id> <m_PortAddress>"5001438102cfba20"</m_PortAddress> <m_PortNumber>0</m_PortNumber> <m_MtuActive>2048</m_MtuActive> <m_MtuSupported>2048</m_MtuSupported> <m_SpeedCurrent>0</m_SpeedCurrent> <m_SpeedMax>4</m_SpeedMax> <m_ScsiRoleInfo>1</m_ScsiRoleInfo> <m_FCPortTypeInfo>1</m_FCPortTypeInfo> <m_InterfaceProtocolType>3</m_InterfaceProtocolType> <m_PortStatus>0</m_PortStatus> <m_HbaGroup><ref id="8967"/></m_HbaGroup> </DbPortCharacteristic> </database> $ python -V Python 2.6.4 ________________________________
-- http://mail.python.org/mailman/listinfo/python-list