关于java Dom4j根据属性删除节点

A22227a 2013-08-12 10:53:23
最近做项目用到XML技术,选择Dom4j来进行操作,XML格式如下:
<?xml version="1.0" encoding="GBK"?>
<chanpin>
<CP name="1" price="1"/>
<CP name="2" price="2"/>
</chanpin>
现在要做的是根据CP的属性name来删除指定的CP节点,已经规定了每个name对应一个唯一的值,下面是java代码:
public static void deleteXML(String name)
{
OutputFormat format = OutputFormat.createPrettyPrint();//指定XML的输出样式
format.setEncoding("GBK"); // 指定XML编码
Document document=null;
SAXReader saxReader = new SAXReader(); // 用来读取xml文档
try {
//url是文件的地址
document = saxReader.read(new File(url));
List list=document.selectNodes("/chanpin");//查找指定的节点
Iterator iterator=list.iterator();//迭代chanpin下所有的节点
while(iterator.hasNext())
{
Element ele=(Element) iterator.next();
Iterator it=ele.elementIterator("CP");//指定到CP
while(it.hasNext())
{
Element es=(Element) it.next();//迭代的所有CP节点
//先确定CP属性不为空,然后再根据name属性来查找到需要的节点 if(es.attributeValue("name")!=null&&es.attributeValue("name").equals(name))
{
ele.remove(es);
}
}
}
} catch (DocumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//
try {
//重新写入到XML文档
XMLWriter writer=new XMLWriter(new FileWriter(new File(url)),format);
writer.write(document);
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
...全文
282 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
A22227a 2013-08-12
  • 打赏
  • 举报
回复
引用 2 楼 zyrobert 的回复:
楼主没说什么问题?
这个是我今天刚想到的根据属性来删除节点的,之前从网上找一直没找到,所以在这分享下。
zyrobert 2013-08-12
  • 打赏
  • 举报
回复
楼主没说什么问题?
A22227a 2013-08-12
  • 打赏
  • 举报
回复
其中document.selectNodes我用的包是jaxen-1.1-beta-7.jar,解析XML所用的Dom包我用的是dom4j-1.6.1.jar。
abguorui0928 2013-08-12
  • 打赏
  • 举报
回复
送一个小技巧,不妨将一些常用的方法,提成工具类,比如这里的读取xml文档和生成xml文档 接分了...
zyrobert 2013-08-12
  • 打赏
  • 举报
回复
引用 3 楼 A22227a 的回复:
引用 2 楼 zyrobert 的回复:
楼主没说什么问题?
这个是我今天刚想到的根据属性来删除节点的,之前从网上找一直没找到,所以在这分享下。
原来是来送分的 楼主分拿来

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧