您的位置:首页 > 其它

递归遍历XML所有节点

2013-07-05 22:12 411 查看
package xml;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.DocumentException;
import org.dom4j.Element;

import java.util.*;

/**
* @author zouhailin
* 2013-7-5
*/
public class XmlTest {

//    private static Map<String, String> xmlmap = new HashMap<String, String>();
//存储xml元素信息的容器
private static List<String> elemList = new ArrayList<String>();

//要测试的xml对象
private static String srcXml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
"<doc>\n" +
"    <person>\n" +
"        <name>某人</name>\n" +
"        <adds>            \n" +
"            <add ID=\"10002\">\n" +
"                <BS>10002</BS>\n" +
"                <note>西安市太白路</note>\n" +
"            </add>\n" +
"            <add ID=\"\">\n" +
"                <BS>10002</BS>\n" +
"                <note>空ID节点啊</note>\n" +
"            </add>\n" +
"            <add>\n" +
"                <BS>10002</BS>\n" +
"                <note>空ID节点啊</note>\n" +
"            </add>\n" +
"\t\t\t<add ID=\"10001\">\n" +
"\t\t\t\t<BS xmlns=\"10001\"/>\n" +
"                <note>西安市太白路2</note>\n" +
"            </add>\n" +
"\t\t</adds>\n" +
"    </person>\n" +
"    <other>\n" +
"        <name ID=\"HEHE\">ASDF</name>\n" +
"    </other>\n" +
"</doc>";

public static void main(String args[]) throws DocumentException {
XmlTest test = new XmlTest();
Element root = test.getRootElement();
test.getElementList(root);
String x = test.getListString(elemList);

System.out.println("-----------原xml内容------------");
System.out.println(srcXml);
System.out.println("-----------解析结果------------");
System.out.println(x);

}

/**
* 获取根元素
*
* @return
* @throws DocumentException
*/
public Element getRootElement() throws DocumentException {
Document srcdoc = DocumentHelper.parseText(srcXml);
Element elem = srcdoc.getRootElement();
return elem;
}

/**
* 递归遍历方法
*
* @param element
*/
public void getElementList(Element element) {
List elements = element.elements();
if (elements.size() == 0) {
//没有子元素
String xpath = element.getPath();
String value = element.getTextTrim();
elemList.add(xpath+" "+value);
} else {
//有子元素
for (Iterator it = elements.iterator(); it.hasNext();) {
Element elem = (Element) it.next();
//递归遍历
getElementList(elem);
}
}
}

public String getListString(List<String> elemList) {
StringBuffer sb = new StringBuffer();
for (Iterator<String> it = elemList.iterator(); it.hasNext();) {
String str = it.next();
sb.append(str+"\n");
}
return sb.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: