在解析不完整的XML时处理xml.dom.minidom中的KeyError

时间:2017-08-26 15:30:56

标签: parsing minidom

我是Python新手并尝试使用xml.dom.mindom解析xml文件。 xml在标记下缺少一些属性。我的要求是它应该至少尝试打印存在的属性。 minidom制作这些属性的字典,如果它没有找到密钥则会抛出KeyError。我试图处理它,但没有成功打印存在的那些。

以下是我的Python代码:

if (position - 1 >= 0) {

            String currentDate = alarmDetails.getAlarmDate();

            String previousDate = alarmDetails.getAlarmDate();


             // Cursor version
            //String currentDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));
            //cursor.moveToPosition(position - 1);
            //String previousDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date"));

            if (currentDate.equalsIgnoreCase(previousDate)) {

                viewHolder.header.setVisibility(View.GONE);
                viewHolder.cardView.setVisibility(View.GONE);

            } else {


                viewHolder.header.setVisibility(View.VISIBLE);
                viewHolder.cardView.setVisibility(View.VISIBLE);
                viewHolder.header.setText(currentDate);

            }


    } else {


        viewHolder.header.setVisibility(View.VISIBLE);
        viewHolder.cardView.setVisibility(View.VISIBLE);
        viewHolder.header.setText(alarmDetails.getAlarmDate());

        Cursor Version
        //viewholder.header.setText(cursor.getString(cursor.getColumnIndexOrThrow("complete_date")));


   }

}

XML如下

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')

1 个答案:

答案 0 :(得分:0)

您在XML中有namespacesgetElementsByTagName(tagname)在这些情况下无法正常工作。为了使用标记名称获取元素,您必须使用具有相应名称空间的getElementsByTagNameNS(namespace, tag),并且您将获得正确的搜索结果。

示例:

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

依旧进行剩余搜索。

您可以在Element namespaces search

上详细了解相关信息