2017-08-26 4 views
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でnamespacesを持って

<?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 &#34;static&#34; (immediate) or &#34;dynamic&#34; (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 &#34;true&#34; or &#34;false&#34;."/> 
     </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> 

答えて

0

次のように。 getElementsByTagName(tagname)これらの場合は正しく動作しません。タグ名を使用してElementsを取得するには、getElementsByTagNameNS(namespace, tag)に適切な名前空間を使用する必要があります。正しい検索結果が得られます。

例:残りの検索のために

document.getElementsByTagNameNS(resources.jms, "JMSProvider") 

など。

Element namespaces search

関連する問題