我是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')
答案 0 :(得分:0)
您在XML中有namespaces
。 getElementsByTagName(tagname)
在这些情况下无法正常工作。为了使用标记名称获取元素,您必须使用具有相应名称空间的getElementsByTagNameNS(namespace, tag)
,并且您将获得正确的搜索结果。
示例:
document.getElementsByTagNameNS(resources.jms, "JMSProvider")
依旧进行剩余搜索。
上详细了解相关信息