有几年工作经验的,无需再看此文。
在解析XML文件的时候,可选择的方案有大约四种,具体就不说了,但是其中最好的应该是使用dom4j 来操作XML最为方便。
最近遇到个项目,以XML传输信息,文件的内容不定,格式不定,数据的种类和大小也不定,只是告诉你会有N多的字段出现在xml文件中,
可能是包含在很多结构体中,也可能就是一个element ,要求对这样的xml文件进行解析,并取得到相关的值。
咋一看,我靠,啥破玩意,格式,内容,标签什么都没有,只告诉你是用XML传输,还要取得它的值,确实有点蒙。
不过,细细想,也不是很难,无非就是要取得每个标签下的标签名和标签所的的值吗,想清楚了这个,其实就是编码的问题了。。。
不多说了,直接上code.
static StringBuffer buffer = null;
public static String getContentByXML(String xmlContent) {
buffer = new StringBuffer("");
try {
Document document = DocumentHelper.parseText(xmlContent);
Element root = document.getRootElement();
List<Element> elemList = root.elements();
if(elemList!=null && elemList.size()>0){
for (Element element : elemList) {
getElementVal(element);
}
}else{
getElementVal(root);
}
return buffer.toString();
} catch (Exception e) {
return null;
}
}
public static void getElementVal(Element element) {
try {
Iterator<Element> iterator = element.elementIterator();
if (iterator.hasNext()) {
while(iterator.hasNext()){
getElementVal(iterator.next());
}
}else {
if (element.isTextOnly()) {
String name = element.getName();
String value = element.getTextTrim();
if (StringUtil.isNotBlank(value)) {
String result =name +":"+ value+" \n";
buffer.append(result);
}
}
}
} catch (Exception e) {
logger.info("读取xml文件出错了.请检查xml文件是否完好!");
}
}
总结下:
这个得需求是要取得xml文件中的内容,可是并没有告诉你有哪些标签,也不告诉你标签的位置,样式,结构,
初看是比较的痛苦,不过,细想一下,其实也好好,毕竟dom4j 为我们提供了很多的函数去调用。
在上例中,采用了递归的算法来读取每个element ,并判断是否有子标签,依次读取值并做返回就OK !