dom4j 删除XML节点

今天完善开发了一下JAVA RSS生成程序,主要是对XML文件的操作!整理一下思路是这样的:

  1. 若XML文件不存在,则生成之
  2. 若文件存在,并且新文章与原有item不重复,将新文章内容插入之
  3. 删除文章,删除item
  4. 控制文章数目变量rssCount,超出该数值先删除最旧的item,然后再插入数据,保证生成数据的准确性。

OK,这样就搞定!

折腾了半天时间主要浪费在了查找相关API文档及节点删除问题上! 其实代码写出来很简单,没多少,但思考的时间却是蛮多!

下面来看看这个删除XML节点的代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
List itemList = document.selectNodes("//rss/channel/item");
//获得item节点list对象
int itemListsize = itemList.size();
int[] delarray = getInItemNumber(RssUtils.getFilename(bbsinfo.getTypeid()));
//获得每个item对象的guid 标识符并通过getInItemNumber方法对其排序,
//当然如果本来已经是有序的则不需另作排序
int delorder =0;
while (itemListsize >= rssCount) {//rssCount控制RSS输出数量	
	for(int x =0;x <itemList.size();x++){								
		Element itemElement = (Element)itemList.get(x);
		Element guidElement = (Element)itemElement.element("guid");
		if(guidElement.getText().equals(String.valueOf(delarray[delorder]))){
			itemElement.detach();
		//删除节点通过detach()方法,查了半天API文档才找到
			break;
		 }
		}
		delorder++;
		itemListsize--;//这里的++ -- 一定不能忘,否则无限循环!
}

哈哈,我这样标注得够详细了吧!我在网上看到很多朋友是用Iterator进行迭代,个人感觉Iterator在这里不好用,用之麻烦!

嗯,除了删除节点问题其他的关于XML文档的生成与添加数据还算容易!

PS. 之前在博客整天喷些没用的东西,嗯,现在写点与工作相关的吧,以做思想标记与日后查找,HOHO….

7 Responses to “dom4j 删除XML节点”

  1. 博主是高手,现在潜心研究写代码

    [Reply]

  2. littlebear CANADA Mozilla Windows says:

    有趣, java的rss很新鲜

    [Reply]

    久酷 AUSTRALIA Mozilla Firefox Windows Reply:

    @littlebear, java也是做网站的一种语言嘛,呼呼……

    [Reply]

  3. 哈默 CHINA Google Chrome Windows says:

    大材小用啊,这个应用场景直接生成新的xml多好

    [Reply]

    久酷 AUSTRALIA Mozilla Firefox Windows Reply:

    @哈默, 直接生成的话效率低吧,只有当XML不存在的时候才会重新生成,生成之后,每次直接修改就好了,呼呼…… 修改的数据量要小好多

    [Reply]

    哈默 CHINA Google Chrome Windows Reply:

    @久酷, 我还是觉得只要判断有新文章的时候就重新生成比较简单。你这个需要遍历,比较,然后再插入或者删除节点,逻辑上复杂多啦。当然具体还是需要看你的实际应用情况,不过可以对比下 :-)

    [Reply]

    久酷 AUSTRALIA Mozilla Firefox Windows Reply:

    @哈默, 嗯,这个确实是,要遍历, 排序 ,排序后查找将最旧的删除 然后再进行插入操作 ,比直接生成要复杂一些,HOHO^_^

Leave a Reply

:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:


正在读取数据……