获取xml的所有子节点
应用webservice传输xml时,可能需要获取xml的所有子节点,本文为获取子节点相关代码及介绍!
- 1.获取根
public String getRoot(String xml) throws DocumentException{
Document doc = DocumentHelper.parseText(xml);
@SuppressWarnings("unused")
SAXReader reader = new SAXReader();
Element root=doc.getRootElement();
return getNodes(root);
}
- 2. 根据参数root获取节点,并且对有下属节点的节点进行了递归调用
/**
* @param root
* @throws IOException
* @des 根据参数root获取节点,并且对有下属节点的节点进行了递归调用
*/
@SuppressWarnings("unchecked")
public String getNodes(Element root){
StringBuffer sb =new StringBuffer();
String el ="<"+ root.getName()+">"+"\r\n";
String el2 ="</"+ root.getName()+">";
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
sb.append(el);
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
List<Element> listElement = element.elements();
//判断根目录下的所有子节点得到的list.size是否大于0,如果大于则遍历所有一级子节点
if(listElement.size()>0){
String nodeF = "<"+element.getName()+">"+"\r\n";
sb.append(nodeF);
for (Element e : listElement) {// 遍历所有一级子节点
String s = "<"+e.getName()+">";
String s1 = "</"+e.getName()+">"+"\r\n";
if(e.getText()!=null && !"".equals(e.getText())){
String ss =s+e.getText()+s1;
sb.append(ss);
getNodes(e);// 递归
}
}
String nodeF2 = "</"+element.getName()+">"+"\r\n";
sb.append(nodeF2);
}else {
String nodeF = "<"+element.getName()+">";
String nodeF2 = "</"+element.getName()+">"+"\r\n";
if(element.getText()!=null && !"".equals(element.getText())){
sb.append(nodeF+element.getText()+nodeF2);
}else sb.append(nodeF+nodeF2);
}
}
sb.append(el2);
return sb.toString();
}
- 3.全部代码
package util;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class IteraXml {
/**
* @param xml
* @throws IOException
* @des 根据参数xml获取根目录
*/
public String getRoot(String xml) throws DocumentException{
Document doc = DocumentHelper.parseText(xml);
@SuppressWarnings("unused")
SAXReader reader = new SAXReader();
Element root=doc.getRootElement();
return getNodes(root);
}
/**
* @param root
* @throws IOException
* @des 根据参数root获取节点,并且对有下属节点的节点进行了递归调用
*/
@SuppressWarnings("unchecked")
public String getNodes(Element root){
StringBuffer sb =new StringBuffer();
String el ="<"+ root.getName()+">"+"\r\n";
String el2 ="</"+ root.getName()+">";
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
sb.append(el);
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
List<Element> listElement = element.elements();
//判断根目录下的所有子节点得到的list.size是否大于0,如果大于则遍历所有一级子节点
if(listElement.size()>0){
String nodeF = "<"+element.getName()+">"+"\r\n";
sb.append(nodeF);
for (Element e : listElement) {// 遍历所有一级子节点
String s = "<"+e.getName()+">";
String s1 = "</"+e.getName()+">"+"\r\n";
if(e.getText()!=null && !"".equals(e.getText())){
String ss =s+e.getText()+s1;
sb.append(ss);
getNodes(e);// 递归
}
}
String nodeF2 = "</"+element.getName()+">"+"\r\n";
sb.append(nodeF2);
}else {
String nodeF = "<"+element.getName()+">";
String nodeF2 = "</"+element.getName()+">"+"\r\n";
if(element.getText()!=null && !"".equals(element.getText())){
sb.append(nodeF+element.getText()+nodeF2);
}else sb.append(nodeF+nodeF2);
}
}
sb.append(el2);
return sb.toString();
}
public String getReturnXMl(String xml) throws DocumentException{
return getRoot(xml);
}
// public static void main(String[] args) throws DocumentException {
// String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
// "<reqData>"+
// "<qflag>你好</qlag>"+
// "<test>"+
// "<test1>test1</test1>"+
// "<test2>test2</test2>"+
// "</test>"+
// "<poNo>测试</poNo>"+
// "</reqData>";
// IteraXml im = new IteraXml();
// String ss = im.getRoot(xml);
// System.out.println(ss);
// }
}
选中注释的main函数,ctrl+/即可解开注释,进行测试
- *注意事项:
1.xml 的拼接方法要正确,否则会报错
2.字符串拼接“\r\n”是为换行
3.暂时没了