> 信息中心 >

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

来源:互联网 编辑:刘梓楠

有网友碰到过这样的问题: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)); 运行结果正常. 查看源文件

在这里插入图片描述

,我搜你通过互联网收集了相关的一些解决方案,希望对有过相同或者相似问题的网友提供帮助,具体如下:

解决方案1:
//修改xml元素
//得到要修改的元素节点
for (int i = 0; i < yearElements.getLength(); i++) {
//找到当前"year"元素节点的父节点,然后使用父节点删除所有"year"子节点
Node temp = yearElements.item(i);
temp.getParentNode().removeChild(temp);
}
debug上面的代码,我觉得可以for (int i = 0, length = yearElements.getLength(); i < length; i++)
怀疑删除year时可能yearElements的长度变了 收获园豆:30
============================================
嗯嗯,没错,每次删除元素的时候,yearElements集合中的内容会发生变化
============================================
多谢指教

使用Dom解析xml出现的异常

答:从你的代码上看不出什么来。 Element typeElement = (Element) childList.item(j); //Exception 错误的原因是 com.sun.org.apache.xerces.internal.dom.DeferredTextImpl 不能转成 org.w3c.dom.Element 你看一下你引用的类吗,估计是同名的你引...

java删除xml文件节点??

答:java删除xml文件节点,主要方式是先解析整个xml文件,然后根据节点的编号,进行删除,代码如下: package test; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; impo...

java中DOM解析XML文件奇葩的错误 java.lang.NullPo...

答:代码如下: public class LoadXml extends Activity { private final static String TAG="LoadXml"; public static Context context = null; Document document = null; NodeList childsNodes = null; DocumentBuilderFactory factory = null; D...

java怎样用dom修改xml元素名或者属性名

答:dom4j还是jdom?说清楚点。。 百度一下特别多。。。

java 中用dom解析xml文件出错啦,请问是什么错啊?...

答:XML文件结构不对

求救java dom写xml问题

答:localhost 在浏览器眼里也不过是个 127.0.0.1 的服务器罢了。 你在浏览器里看的XML是看的JS修改的在缓存目录里面的文件,和源文件没关系。 你得去浏览器的缓存目录看修改后的内容

用DOM解析XML怎么老有#TEXT的啊

答:在那个输出的for循环里,你应该加上一句判断。if(node2 instanceof Element){ String string = node2.getNodeName(); String ste = node2.getTextContent(); System.out.println(string+" "+ste);}出现这种问题的原因主要是使用org.w3c.dom.Node...

关于JAVA DOM 导出XML的问题,什么情况下会有 xsi:n...

答:当返回值为null:,当返回值为空字符时(即“”)时返回,今天也遇到同样的问题,经过数次测试得出结果。

关于如何去除dom生成的xml文件头的standalone="no

答:一般你生成xml文件的时候,肯定需要在代码中这样操作: //将生成的xml文件保存在"F:/text.xml"文件中 FileWriter fw = new FileWriter("F:/text.xml"); 你肯定是缺少有效路径。 代码总汇一下: //将生成的xml文件保存在"F:/text.xml"文件中 File...

编写一个Java程序,使用DOM解析器解析下列XML文件

答:用dom4j解析,非常快,具体怎么解析 SAXReader reader = new SAXReader(); String filePath = "c:/abc.xml"; File file = new File(filePath); Document document = reader.read(file);// 读取XML文件 Element root = document.getRootElement()...


请注意,本站信息均收集自互联网,相关信息仅供参考,医疗等重要信息请以正规途径为最终意见,本站不承担任何责任!

www.wosoni.com false 互联网 http://www.wosoni.com/blogcnk/mm/ccdeih.html report 3271 解决方案1://修改xml元素//得到要修改的元素节点for (int i = 0; i < yearElements.getLength(); i++) {//找到当前"year"元素节点的父节点,然后使用父节点删除所有"year"子节点Node temp = yearElements.item(i);temp.getParentNode().removeChild(temp);}debug上面的代码,我觉得可以for (int i = 0

热门图片