You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
4.1 KiB
Java

package com.docus.bgts.utils;
import com.alibaba.fastjson.JSON;
import com.docus.bgts.enums.Codes;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class XmlUtils {
//定义解析器和文档对象
private SAXReader saxReader;
private Document document;
public XmlUtils(String path) {
//获取解析器
saxReader = new SAXReader();
try {
//获取文档对象
document = saxReader.read(path);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public XmlUtils(InputStream path) {
//获取解析器
saxReader = new SAXReader();
try {
//获取文档对象
document = saxReader.read(path);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* @return
*/
public String getElement(String name){
//获取根节点
Element root = document.getRootElement();
Object directory = FileUtils.getJsonByName(Codes.DIRECTORY.getMessage());
Element current=root;
if(directory==null){
throw new RuntimeException("没有定义目录结构");
}
List<String> directoryArr=(List<String>)directory;
for (String dire : directoryArr) {
current=current.element(dire);
}
return current.element(name)==null?"":current.element(name).getText();
}
/**
*
* @return
*/
public Element getElement(List<String> directory){
//获取根节点
Element root = document.getRootElement();
Element current=root;
List<String> directoryArr=directory;
for (String dire : directoryArr) {
current=current.element(dire);
}
if(current==null){
throw new RuntimeException("未找到对应节点");
}
return current;
}
/**
*
*/
public List<Element> getJsonByName(){
//获取目录结构
String path = FileUtils.currentPath();
//解析json映射文件
String json = JsonUtils.readJsonFile(path + Codes.JSON_ADDRESS.getMessage());
Map jsonMap = JSON.parseObject(json, Map.class);
//判断是否多条
List<String> basicArr= (List<String>) jsonMap.get("doubleBasic");
List<String> directory= (List<String>) jsonMap.get("basicDirectory");
List<Element> elements=null;
Element root=this.getElement(directory);
for (String basic : basicArr) {
elements=root.elements(basic);
if(elements!=null&&elements.size()>0){
break;
}
}
if(elements==null||elements.size()==0){
//只有一条
List<String> rootDirectory= (List<String>) jsonMap.get("directory");
root = this.getElement(rootDirectory);
elements=new ArrayList<>();
elements.add(root);
}
return elements;
}
/**
*
*
* @param name
* @return
*/
public String getElementText(String name) {
//定位根节点
Element root = document.getRootElement();
//根据名称定位节点
Element msg = root.element(Codes.MSG.getMessage());
if(msg==null){
throw new RuntimeException("没有"+Codes.MSG.getMessage()+"节点");
}
// Element patInfo = msg.element(Codes.PAT_INFO.getMessage());
// if(patInfo==null){
// throw new RuntimeException("没有"+Codes.PAT_INFO.getMessage()+"节点");
// }
Element element = msg.element(name);
if(element==null){
return null;
}
//返回节点内容
return element.getText();
}
}