如何使用java中的文本内容从xml文件中删除元素?

时间:2015-12-04 15:30:30

标签: java xml dom

我在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>的孩子,但似乎无法正常工作

2 个答案:

答案 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,然后遍历列表中的节点。

第三 - 您正在删除完整的群组,而不仅仅是群组用户。