java中使用DOM删除xml文件中的元素时的问题?

  • 在学习java的DOM解析的时候,发现一个问题,就是在使用循环的方式使用removeChild()这个方法删除元素,发现只能够删除第一个元素,其他同名称的元素无法删除?百度谷歌也没找到答案,特来请教各位大神,如有老师肯指教,感激不尽.

具体问题如下

  • 原xml文件内容
<?xml version="1.0" encoding="utf-8"?>
<shop>
	<pen>
		<type>钢笔</type>
		<manufacturers id="9567">长城牌</manufacturers>
		<tradePrice>0.5</tradePrice>
		
	</pen>
	<book>
		<name>新的世界,新的你</name>
		<year>3</year>
		<price >56.6</price>
	</book>
	<book>
		<name>java入门到跑路</name>
		<year>111</year>
		<price >100</price>
	</book>
</shop>

删除所有同名称的元素

  • 例如,删除xml文件中所有<year>元素
    • 使用DocumentBuilder类将xml文件读取到内存中,形成dom树
        //使用DocumentBuilder解析原xml文件,将xml文件中的数据加载到内存中,形成DOM树
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        File xmlFile = new File("e:"+ File.separator+"testWeb"+File.separator+"info.xml");
        Document xmlDoc = docBuilder.parse(xmlFile);
  • 找到DOM树中所有"year"元素节点
        //得到要修改的元素节点
        NodeList yearElements = xmlDoc.getElementsByTagName("year");
  • 循环删除每个"year"元素节点
        //修改xml元素
        //得到要修改的元素节点
        for (int i = 0; i < yearElements.getLength(); i++) {
            //找到当前"year"元素节点的父节点,然后使用父节点删除所有"year"子节点
            Node temp = yearElements.item(i);
            temp.getParentNode().removeChild(temp);
        }
  • 删除元素之后,要将当前的DOM树结构,覆盖掉原来的xml文件的DOM树
    • 要将DOM树从内存中输出到文件,需要用的是Transformer类进行操作

        //将修改后的DOM树,覆盖到原xml文件中
        TransformerFactory tfFactory = TransformerFactory.newInstance();
        Transformer transformer = tfFactory.newTransformer();
        transformer.transform(new DOMSource(xmlDoc),new StreamResult(xmlFile));
  • 运行结果正常.
  • 查看源文件

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43386754/article/details/85600019
今日推荐