> 信息中心 >

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集合中的内容会发生变化
============================================
多谢指教

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

答:http://111.111.1.111:8080/jsp/会不会是敏感字符呢? 楼主写成这样试试:

JAVA DOM解析XML文件出错,求大神帮忙

答:是说你在Element转换的时候出错了,是不是Element的包导入错了,或者强制转换成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文档数据进行查询,...

答:利用dom4j来做的. 下载两个包: dom4j-1.6.1.jar dom4j-full.jar 然后写类 做crud的相关操作就可以的了 document 的相关API 可以查询.先取出然后再做相关操作就好了

怎么在java中使用dom解析XML文件中标签属性值? 有...

答:public static void main(String[] args) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("d:/test.xml"); //xml文件的绝对目录 //得到...

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

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

java当中用DOM解析xml,报告初始化错误,求解

答: 我怀疑你的XML文件里包括GBK 应该用UTF-8形式读取

java 使用sax或者dom 解析xml时能同时保存修改后的...

答:sax和dom解析xml肯定没问题 java重写文件肯定没问题 所以你这个问题也就是两个操作的结合!!

怎么通过JAva解析的方法把一个xml文件分成两个XML ...

答:解析出来的数据你放在不同的变量存放不就分成两个了吗? 如果你要把数据写入两个DOM再生成两个文件的话: //实例化解析器 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocum...

java Document里判断XML文件中有无此节点

答:获取节点名称然后和content做比较就可以了

java中dom4j解析xml文件怎么获取节点属性

dom4j中,使用Element.attributes方法可以获取到节点的属性,而使用elements则可以获取相应的子节点 比如: Element root = doc.getRootElement(); List attrList = root.attribute...

使用JAVA DOM如何对XML文件进行增删改查操作

还是用dom4j比较好。

java与dom4j 使用类OutputFormat 取得XML格式后写入一个XM...

话不多说,先上代码 import java.io.FileOutputStream; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import org.dom4j.DocumentHelper; import org.dom4j.E...

Java xml DOM(删除,增加节点)

推荐JDom 综合Dom和Sax的优点

dom4j删除xml的节点

哥们,首先你这个xml文件就不规范,这不是xml文件。 xml文件必须有一个root结点;另外... ;就可以了 记得操作完之后要重新写入回去,否则改变的不是文件本身而是内存中的对...

跪求一个例子,利用dom4j对xml文档进行增删改查,特别是查,尽量...

这是xml文件 1 a 华夏银行 海淀区 large 4 b 招商银行 昌平区 middle 5 c 工商银行 朝阳区 little 下面是解析 import java.io.File; import java.io.FileO...

java中用dom4j如何循环XML各个节点,输出属性值到控制台??请...

; Document doc = builder.parse(file); // 获取到xml文件 // 下面开始读取 Element root = doc.getDocumentElement(); // 获取根元素 NodeLis...

java怎样读写和修改XML文件??

/users> java: package com.lianxi.DAO; import java.io.File; import javax.xml.p... String filename) { boolean flag = true; try { /** 将document中的内容写入文件中 *...

java如何从一个xml文件读取根节点、子节点属性。

每个xml文件获取其中的bean节点属性。 1> 有xml文件路径,获取该路径下的所有文件... org.w3c.dom.Document doc = builder.parse(is); 创建文档对象。 3>doc.getChildNod...

java 修改xml文件 我是想动态添加mp3信息 mp3信息全部在xm...

读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题,注意要把各... xml文档的根节点。一切XML分析都是从Root元素开始的。 3. 遍历XML树 DOM4J...


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

www.wosoni.com false 互联网 http://www.wosoni.com/blogcnk/mm/ccdeih.html report 5535 解决方案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

热门图片