- 在学习java的DOM解析的时候,发现一个问题,就是在使用循环的方式使用removeChild()这个方法删除元素,发现只能够删除第一个元素,其他同名称的元素无法删除?百度谷歌也没找到答案,特来请教各位大神,如有老师肯指教,感激不尽.
具体问题如下
<?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树
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);
NodeList yearElements = xmlDoc.getElementsByTagName("year");
for (int i = 0; i < yearElements.getLength(); i++) {
Node temp = yearElements.item(i);
temp.getParentNode().removeChild(temp);
}
- 删除元素之后,要将当前的DOM树结构,覆盖掉原来的xml文件的DOM树
- 要将DOM树从内存中输出到文件,需要用的是Transformer类进行操作
TransformerFactory tfFactory = TransformerFactory.newInstance();
Transformer transformer = tfFactory.newTransformer();
transformer.transform(new DOMSource(xmlDoc),new StreamResult(xmlFile));