我在xml文件中有以下内容
<data>
<group>
<groupname>a</groupname>
<groupuser>Saw</groupuser>
<groupuser>John</groupuser>
</group>
<group>
<groupname>b</groupname>
<groupuser>John</groupuser>
<groupuser>Saw</groupuser>
</group>
<group>
<groupname>c</groupname>
<groupuser>John</groupuser>
<groupuser>Saw</groupuser>
</group>
<user>
<username>John</username>
<password>1234</password>
</user>
</data>
我正在尝试删除此元素
<groupuser>John</groupuser>
这是我的方法:
public void removeUserGroup(String username) {
try {
File fXmlFile = new File(filePath);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("group");
for (int temp = 0; temp < nList.getLength(); temp++) {
Element group = (Element) nList.item(temp);
for (int temp2 = 0; temp2 < group.getElementsByTagName("groupuser").getLength(); temp2++) {
Element name = (Element) group.getChildNodes().item(temp2);
if (name.getTextContent().equals(username))
group.getParentNode().removeChild(group);
}
}
} catch (Exception ex) {
System.out.println("Database exception");
}
}
代码进入此处并且不会抛出异常
group.getParentNode().removeChild(group);
但xml文件中没有任何反应!
我在另一个问题中使用了这个方法,我将其修改为循环<group>
的孩子,但似乎无法正常工作
答案 0 :(得分:1)
删除元素后,您必须将输出保存到某个文件才能看到某些内容:
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(new File("someFilePath")));
现在您可以查看是否已将其正确删除了!
修改强>
如果您想要巧妙地打印文件,则必须在转换之前添加这些行:
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
这将创建一些不错的注意力,使您的文件更具可读性!
答案 1 :(得分:1)
首先,您不要将xml保存回文件。
其次,这段代码虽然可能在某些情况下有效,但却是错误的:
for (int temp2 = 0; temp2 < group.getElementsByTagName("groupuser").getLength(); temp2++){
将结果保存到NodeList,然后遍历列表中的节点。
第三 - 您正在删除完整的群组,而不仅仅是群组用户。