0
我对Python很陌生,试图使用xml.dom.mindom解析xml文件。 xml在标签下缺少一些属性。我的要求是它至少应该尝试打印出现的属性。 minidom制作这些属性的字典,如果它没有找到该键,则会引发KeyError。我试图处理它,但不能成功地打印出现的。在解析不完整的XML时处理xml.dom.minidom中的KeyError
下面是我的Python代码:
from xml.dom import minidom
try:
xmldoc = minidom.parse('resources1.xml')
document = xmldoc.getElementsByTagName("xmi:XMI")[0]
JMSProviders = document.getElementsByTagName("resources.jms:JMSProvider")
for JMSProvider in JMSProviders:
try: #This try block to handle KeyError
id_name = JMSProvider.attributes["xmi:id"]
name_id = id_name.value
j_JMSName = JMSProvider.attributes["name"]
name_JMSName = j_JMSName.value
des_name = JMSProvider.attributes["description"]
description_value = des_name.value
print "\n ID of JMS is: %s JMS Name: %s Description : %s " %(name_id,name_JMSName, description_value)
except KeyError:
continue
except IOError:
print ('\n\n Resources.xml file not present at Cell level \n\n')
XML如下
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:resources.jms="http://www.ibm.com/websphere/appserver/schemas/5.0/resources.jms.xmi" xmlns:resources.j2c="http://www.ibm.com/websphere/appserver/schemas/5.0/resources.j2c.xmi" xmlns:resources="http://www.ibm.com/websphere/appserver/schemas/5.0/resources.xmi" xmlns:resources.mail="http://www.ibm.com/websphere/appserver/schemas/5.0/resources.mail.xmi" xmlns:resources.url="http://www.ibm.com/websphere/appserver/schemas/5.0/resources.url.xmi">
<xmi:Documentation>
<contact>[email protected]</contact>
</xmi:Documentation>
<resources.jms:JMSProvider xmi:id="builtin_jmsprovider" name="WebSphere JMS Provider" description="Built-in WebSphere JMS Provider" externalInitialContextFactory="" externalProviderURL=""/>
<resources.jms:JMSProvider xmi:id="builtin_mqprovider" name="WebSphere MQ JMS Provider" externalInitialContextFactory="" externalProviderURL="">
<classpath>${MQJMS_LIB_ROOT}</classpath>
<nativepath>${MQJMS_LIB_ROOT}</nativepath>
</resources.jms:JMSProvider>
<resources.j2c:J2CResourceAdapter xmi:id="builtin_rra" name="WebSphere Relational Resource Adapter" description="Built-in Relational Resource Adapter for Container Managed Persistence" archivePath="${WAS_LIBS_DIR}/rsadapter.rar">
<propertySet xmi:id="J2EEResourcePropertySet_8">
<resourceProperties xmi:id="J2EEResourceProperty_31" name="TransactionResourceRegistration" type="java.lang.String" value="dynamic" description="Type of transaction resource registration (enlistment). Valid values are either "static" (immediate) or "dynamic" (deferred)."/>
<resourceProperties xmi:id="J2EEResourceProperty_32" name="InactiveConnectionSupport" type="java.lang.Boolean" value="true" description="Specify whether connection handles support implicit reactivation. (Smart Handle support). Value may be "true" or "false"."/>
</propertySet>
</resources.j2c:J2CResourceAdapter>
<resources.mail:MailProvider xmi:id="builtin_mailprovider" name="Built-in Mail Provider" description="The built-in mail provider">
<protocolProviders xmi:id="builtin_smtp" protocol="smtp" classname="com.sun.mail.smtp.SMTPTransport" type="TRANSPORT"/>
<protocolProviders xmi:id="builtin_pop3" protocol="pop3" classname="com.sun.mail.pop3.POP3Store" type="STORE"/>
<protocolProviders xmi:id="builtin_imap" protocol="imap" classname="com.sun.mail.imap.IMAPStore" type="STORE"/>
</resources.mail:MailProvider>
<resources.url:URLProvider xmi:id="URLProvider_1" name="Default URL Provider" streamHandlerClassName="unused" protocol="unused"/>
</xmi:XMI>