您的位置:首页 > 其它

用递归实现对无限级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();

}

}

看看吧。希望对你有帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: