> 信息中心 >

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中怎么删除xml元素,和修改元素的属性和删除...

答:和新增XML,没多大分别。。。。。。。删除时,拷贝,忽略不要的 ~ ~ ~

java中使用DOM解析XML文档遇到问题

答:我对Java原生带的DOM类不熟悉 我建议你还是去下载Dom4J。 这个包不仅简化了XML的操作需要的代码和逻辑,而且解析速度奇快无比

java删除xml文件节点??

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

java中xml怎么移除元素的属性

答:你指的应该是java解析xml 然后把xml文件中的某个属性的值 去掉是吧? 一般都是把整个xml读进来 作为一个对象存在内存中 然后把你要做的修改做好后 再重新写入文件 替换掉原来那个xml

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

答:是说你在Element转换的时候出错了,是不是Element的包导入错了,或者强制转换成Element的时候出错了。

怎么在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来做的. 下载两个包: dom4j-1.6.1.jar dom4j-full.jar 然后写类 做crud的相关操作就可以的了 document 的相关API 可以查询.先取出然后再做相关操作就好了

Java修改XML中某元素值,生成新的XML文件。结果其...

答:感觉没必要去管它,如果要弄那就在写出文件之前替换下,好像有个replace方法,格式化会自动将没有内容的标签更换成为关闭的标签。具体你参考下api

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文件出错啦,请问是什么错啊?...

答:XML文件结构不对

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

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

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

推荐JDom 综合Dom和Sax的优点

使用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...

dom4j删除xml的节点

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

PHP中使用DOM方法如何根据XML子节点值或子节点属性删除...

我倒是不太清楚PHP,但是既然涉及到XML的话我想PHP中肯定像JAVA和C#一样也提供了XPATH的接口可以用来快速选取XML中的某个节点 在XPATH里面选取父节点的语...

跪求一个例子,利用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文件 我是想动态添加mp3信息 mp3信息全部在xm...

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


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

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

热门图片