基于具有使用DOM的特定属性从xml文件中删除元素节点

时间:2012-04-09 20:30:11

标签: java xml-parsing

我有以下xml文件结构

<?xml version="1.0" encoding="UTF-8"?>
<data Calls="1" Method="setDescription(java.lang.String) void" Class="Symptom" Package="emrservicedesign" Base_Time_.seconds.="0.000004"/>
<data Invoked_by="1" Method="testSetDescription() void" Class="SymptomTest"/>
<data Calls="4" Method="setDescription(java.lang.String) void" Class="Symptom" Package="emrservicedesign" Base_Time_.seconds.="0.000004"/>
</View> 

我要做的是删除所有以“Invoked_by”为属性的元素节点,因此上述xml文件的结果应为

<?xml version="1.0" encoding="UTF-8"?>
<data Calls="1" Method="setDescription(java.lang.String) void" Class="Symptom" Package="emrservicedesign" Base_Time_.seconds.="0.000004"/>
<data Calls="4" Method="setDescription(java.lang.String) void" Class="Symptom" Package="emrservicedesign" Base_Time_.seconds.="0.000004"/> 
</View>

这是我写的代码

NodeList nodes = doc.getElementsByTagName("data");     
for (int i = 1; i < nodes.getLength(); i++) 
{Node node = nodes.item(i); 
Element e = (Element) node;
if (e.hasAttribute("Invoked_by")){ nodes.item(i).removeChild(node);}

这是错误

org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.

我很感激,如果有任何人可以提供帮助

1 个答案:

答案 0 :(得分:0)

由于Invoked_by不是每个节点的属性,因此在对Invoked_by属性应用XML的remove方法之前,首先检查每个节点中属性的可用性。