- <deviceparameters>
- <parameter componenttype="Table">
<name>TPCSEC</name>
<oid>342234</oid>
<writable>true</writable>
<description>Tata Power SED</description>
- <columns>
<colname access="ReadOnly" type="Integer">col1</colname>
<colname access="ReadOnly" type="Integer">col2</colname>
</columns>
- <rows>
<value>123</value>
<value>231</value>
</rows>
</parameter>
- <parameter componenttype="ListBox">
<name>Enum</name>
<oid>7892</oid>
<writable>true</writable>
<description>This is Enumeration</description>
- <paramvalues type="String">
<value default="Yes">1231</value>
<value default="No">3423</value>
<value default="Yes">231</value>
</paramvalues>
</parameter>
</deviceparameters>
这是我的XML文件。现在,我想删除名为parameter
的节点“TPCSEC
”。
对于此删除,我使用下面的代码。
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
doc = dBuilder.parse(selectedFile);
doc.getDocumentElement().normalize();
rootElement = doc.getDocumentElement();
NodeList nList = doc.getElementsByTagName("parameter");
System.out.println(""+nList.getLength());
for (int temp = 0; temp < nList.getLength(); temp++)
{
Node nNode = nList.item(temp);
Element eElement = (Element) nNode;
String upname1 = getTagValue("name", eElement);
if(upname1.equals(nodeName))
{
System.out.println("Parent: "+nNode.getParentNode().getNodeName());
System.out.println("nodename: "+nNode.getNodeName());
System.out.println("rmoving ....");
rootElement.removeChild(eElement);
System.out.println("removed...");
}
}
我的代码是否正确。执行时,它不会显示任何错误或警告。但它不会删除请求的节点。 感谢..
答案 0 :(得分:1)
您是否已将其写入原始xml文件。我的意思是
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(selectedFile);
transformer.transform(source, result);
答案 1 :(得分:-1)
我可以在您的代码中看到一个问题。那就是在迭代循环时删除项目。
所以这是一个例子。
你有10个东西的列表,在索引5,你删除,你增加你的位置,现在你在索引6,但在你的列表中,你正在查看索引7处的项目。
我倾向于反转循环,设置temp = nList.getLength(),然后执行temp--,以确保在到达之前不删除项目。
答案 2 :(得分:-1)
您正在执行rootElement.removeChild(eElement),但是eElement不一定是root的子节点,它可能是树中另一个节点的子节点,因为您正在获取 all “property”节点。我想你想做什么
eElement.getParentNode().removeChild(element);