Dom元素排序

acckInt 2013-04-27 10:12:17
<?xml version="1.0" encoding="UTF-8"?>
<resource>
<sysid>836</sysid>
<name>aaaaa1111111111111</name>
<type>3</type>
<summary>da11111111111111111</summary>
<file>
<fileid>3-000000</fileid>
<filerealname>course.csv</filerealname>
<filetype>0</filetype>
</file>
<file>
<fileid>2-000000</fileid>
<filetype>0</filetype>
</file>
<file>
<fileid>1-000000</fileid>
<filetype>0</filetype>
</file>
<podcastfile>\xx\res_836/podcast_836.xml</podcastfile>
<podcastcategory>xx</podcastcategory>
</resource>

这么一个xml,前端接收一个1,0,2表示将3个file元素重新排序,即第一个为以前的第二个,第二个为以前的第一个,第三个为以前的第三个,
即为:
<?xml version="1.0" encoding="UTF-8"?>
<resource>
<sysid>836</sysid>
<name>aaaaa1111111111111</name>
<type>3</type>
<summary>da11111111111111111</summary>
<file>
<fileid>2-000000</fileid>
<filetype>0</filetype>
</file>
<file>
<fileid>3-000000</fileid>
<filerealname>course.csv</filerealname>
<filetype>0</filetype>
</file>
<file>
<fileid>1-000000</fileid>
<filetype>0</filetype>
</file>
<podcastfile>\xx\res_836/podcast_836.xml</podcastfile>
<podcastcategory>xx</podcastcategory>
</resource>

程序是:

String ids = "1,0,2,";

String[] index = ids.split(",");
List<String> idlist = new ArrayList<String>();
for(int i=0;i<index.length;i++){
String id = index[i].trim();
if(!",".equals(id)){
idlist.add(index[i].trim());
}
}
Document resoucedoc = XMLUtil.getXMLFileDocument(resoucefile);

NodeList resourcelist = resoucedoc.getElementsByTagName("resource");
NodeList filelist = resoucedoc.getElementsByTagName("file");
NodeList newFileList = resoucedoc.getElementsByTagName("file");
Element resource0 = (Element) resourcelist.item(0);
Node podcastfileNode = resource0.getElementsByTagName("podcastfile").item(0);



if(filelist!=null && filelist.getLength()>0){
for(int j=0;j<idlist.size();j++){
Node fileNode = null;
fileNode = newFileList.item(Integer.parseInt(idlist.get(j)));
// podcastfileNode.getParentNode().insertBefore(fileNode, podcastfileNode);
podcastfileNode.getParentNode().appendChild(fileNode);
}
}
XMLUtil.modifyFile(resoucedoc, resoucefile);

现在的问题就是:循环中,每次运行后newFileList就变了,找的就不是以前那个文本的顺序,类似于List不能再循环中添加删除元素一样,但是这个它每次appendChild以后,都把那个放在最后面,我就取不到正确的元素节点了,请问如何修正呢,提供点思路就好,谢谢。
...全文
120 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
acckInt 2013-04-27
  • 打赏
  • 举报
回复

    int len = filelist.getLength();
	List<Node> newNodeList = new ArrayList<Node>();
	for(int k=0;k<len;k++){
	   newNodeList.add(filelist.item(k));
	}
然后把以前的“fileNode = newFileList.item(Integer.parseInt(idlist.get(j)));”中的newFileList改成newNodeList 就好了,不用它自身的这种集合,用我们处理后的集合

51,410

社区成员

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

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