用递归实现对无限级xml文档的遍历
2008-08-28 17:33
288 查看
如何实现对无限级的xml的遍历呢?我们下面看看如何用递归实现:在这里我使用的是jdom1.0的包来解析xml
/**
遍历无限级的xml文档
*/
public void iterator_XML(Document doc_in){
Document doc = doc_in;//你要处理的xml文档对象
Element root = doc.getRootElement();//获得根节点
List list = root.getChildren();//获得子结点的个数
if(list.size()>0)
{
path+="/"+root.getName();
Element ele = (Element)list.get(0);//第一个子元素
Element parent = ele.getParentElement();//子元素的父节点
//ele(ele,parent);
//elem(ele,parent);
ite_ele(ele,parent);//递归遍历的方法
}
}
/**
对非根节点的遍历,判断它是否是叶子节点,并判断它的兄弟节点,并增加对空白的忽略处理
*/
public void ite_ele(Element ele,Element parent){
try{
Element e = ele;
List list = parent.getChildren();
int index = list.indexOf(e);//获得非文本元素(普通节点元素)在父节点下的index
System.out.println(">>"+index+"::"+e);
System.out.println(e.getName()+"---"+e.getValue());
if(e.getChildren().size()>0){//如果有子结点,查找子节点
Element child = (Element)e.getChildren().get(0);//第一个子元素
ite_ele(child,e);//递归调用
}
else{//只获得叶子节点的xpath值
String xpath =XPathHelper.getPathString(e); //使用XPathHerper要加入jdom-contrib.jar这个包
System.out.println("XPath:::" +xpath);
}
//如果想的到所有节点的xpath值,而不仅仅是叶子节点的值,可以在此处写下面被注释掉的两行代码
//String xpath =XPathHelper.getPathString(e);
//System.out.println("XPath:::" +xpath);
//下面的代码执行的时候,可以确定当前节点没有子节点。以下是查找兄弟节点
//判断是否越界,不越界则获得下一个兄弟节点
if(index+1<parent.getChildren().size())
{
Element el = (Element)parent.getChildren().get(index+1);//本节点的下一个兄弟节点,(非空白)
//System.out.println("inexe: "+(index+1));
ite_ele(el,parent);//递归调用
}
else{
return;
}
}
catch(Exception e){
e.printStackTrace();
}
}
看看吧。希望对你有帮助
/**
遍历无限级的xml文档
*/
public void iterator_XML(Document doc_in){
Document doc = doc_in;//你要处理的xml文档对象
Element root = doc.getRootElement();//获得根节点
List list = root.getChildren();//获得子结点的个数
if(list.size()>0)
{
path+="/"+root.getName();
Element ele = (Element)list.get(0);//第一个子元素
Element parent = ele.getParentElement();//子元素的父节点
//ele(ele,parent);
//elem(ele,parent);
ite_ele(ele,parent);//递归遍历的方法
}
}
/**
对非根节点的遍历,判断它是否是叶子节点,并判断它的兄弟节点,并增加对空白的忽略处理
*/
public void ite_ele(Element ele,Element parent){
try{
Element e = ele;
List list = parent.getChildren();
int index = list.indexOf(e);//获得非文本元素(普通节点元素)在父节点下的index
System.out.println(">>"+index+"::"+e);
System.out.println(e.getName()+"---"+e.getValue());
if(e.getChildren().size()>0){//如果有子结点,查找子节点
Element child = (Element)e.getChildren().get(0);//第一个子元素
ite_ele(child,e);//递归调用
}
else{//只获得叶子节点的xpath值
String xpath =XPathHelper.getPathString(e); //使用XPathHerper要加入jdom-contrib.jar这个包
System.out.println("XPath:::" +xpath);
}
//如果想的到所有节点的xpath值,而不仅仅是叶子节点的值,可以在此处写下面被注释掉的两行代码
//String xpath =XPathHelper.getPathString(e);
//System.out.println("XPath:::" +xpath);
//下面的代码执行的时候,可以确定当前节点没有子节点。以下是查找兄弟节点
//判断是否越界,不越界则获得下一个兄弟节点
if(index+1<parent.getChildren().size())
{
Element el = (Element)parent.getChildren().get(index+1);//本节点的下一个兄弟节点,(非空白)
//System.out.println("inexe: "+(index+1));
ite_ele(el,parent);//递归调用
}
else{
return;
}
}
catch(Exception e){
e.printStackTrace();
}
}
看看吧。希望对你有帮助
相关文章推荐
- XML遍历文档树(广度优先与递归)
- 【转】循环递归遍历XML文档或按某要求遍历XML文档
- 循环递归遍历XML文档或按某要求遍历XML文档
- java非递归实现Xml的遍历(多叉树遍历)
- ML的DOM解析 Java实现 使用递归解析一个XML文档
- java Dom 解析xml文档,实现xml文档结点的增删改查,遍历
- 递归遍历XML文档
- XML的DOM解析 Java实现 使用递归解析一个XML文档
- sax解析xml文档实现打印xml(遍历全部和指定位置)
- Dom 解析xml文档,实现xml文档结点的增删改查,遍历
- 采用二叉链表结构实现二叉树,并以递归遍历思想实现二叉树的创建、二叉树的遍历(先序、中序、后序和层次遍历)
- 二叉树(2)——遍历的非递归实现
- 数据结构基础 图的遍历(三) 之 BFS+DFS(非递归实现)
- PHP递归遍历指定文件夹内的文件实现方法
- 根据xsd生成xml文档的c#实现(转)
- 二叉树的前序遍历的递归实现与非递归实现
- 用邻接表存储有向图并实现DFS(递归+非递归)BFS(非递归)两种遍历
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- Dom4j递归遍历XML所有元素
- 递归和非递归实现二叉树的后续遍历