/**
* 上传XML
* @param request
* @param request
* @return
*/
@Override
@Transactional
public String uploadXML(HttpServletRequest request) throws IOException, ServletException, SAXException, ParserConfigurationException {
//本地路径
String filePath = this.saveFilePath + "hz\\xml\\";
//线上访问路径
String viewFilePath = this.fileAddress + "hz/xml/";
// 获取上传的文件
Part filePart = request.getPart("file");
// 获取输入流
InputStream fileContent = filePart.getInputStream();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
// 解析xml文件
Document doc = dBuilder.parse(fileContent);
// 递归解析Element
Element element = doc.getDocumentElement();
List<String> list = new ArrayList<>();
parseElement(element,list);
String projectnames = list.get(1).split("Name=\"")[1];
String projectname = projectnames.substring(0,projectnames.length()-2);
logger.info("projectname:"+projectname);
String headxml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+"\n"+list.get(0)+"\n"+list.get(1)+"\n"+list.get(2);
String tailxml = list.get(list.size()-3)+"\n"+list.get(list.size()-2)+"\n"+list.get(list.size()-1);
String middlexml = "";
for (int i = 3; i < list.size() - 3; i++) {
middlexml += list.get(i)+"\n";
}
//分组类型
//背板
String bbstr = headxml;
//柜体
String gtstr = headxml;
//(门板/封板)
String mbstr = headxml;
String[] split = middlexml.split("</Panel>");
//分组判断2
String materialListStr = "";
Map<String, String> materialMap = new HashMap();
for (int i = 0; i < split.length; i++) {
String value = split[i]+"</Panel>";
if(-1 != value.indexOf("Memo=\"背板")){
bbstr +=value;
}else if(-1 != value.indexOf("Memo=\"柜体")){
gtstr +=value;
}else if(-1 != value.indexOf("Memo=\"门板") || -1 != value.indexOf("Memo=\"封板")){
mbstr += value;
String material = value.split("Material=\"")[1].split("\"")[0];
if(-1 != materialListStr.indexOf(material)){
materialMap.put(material,materialMap.get(material).toString()+value);
}else{
materialListStr += material+"||";
materialMap.put(material,value);
}
}
}
bbstr += "\n"+tailxml;
gtstr += "\n"+tailxml;
mbstr += "\n"+tailxml;
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
try {
String urls = "";
String charsetName = "UTF-8"; // 字符编码
FileOutputStream fileOutputStream = new FileOutputStream(filePath+"背板"+projectname+".xml");
OutputStreamWriter fileWriter = new OutputStreamWriter(fileOutputStream, charsetName);
fileWriter.write(bbstr);
fileWriter.close();
urls+=viewFilePath+"背板"+projectname+".xml";
fileOutputStream = new FileOutputStream(filePath+"门板"+projectname+".xml");
fileWriter = new OutputStreamWriter(fileOutputStream, charsetName);
fileWriter.write(mbstr);
fileWriter.close();
urls+=","+viewFilePath+"门板"+projectname+".xml";
fileOutputStream = new FileOutputStream(filePath+"柜体"+projectname+".xml");
fileWriter = new OutputStreamWriter(fileOutputStream, charsetName);
fileWriter.write(gtstr);
fileWriter.close();
urls+=","+viewFilePath+"柜体"+projectname+".xml";
for (Map.Entry<String, String> entry:materialMap.entrySet()){
fileOutputStream = new FileOutputStream(filePath+"门板"+projectname+entry.getKey()+".xml");
fileWriter = new OutputStreamWriter(fileOutputStream, charsetName);
fileWriter.write(headxml+entry.getValue()+ "\n"+tailxml);
fileWriter.close();
urls+=","+viewFilePath+"门板"+projectname+entry.getKey()+".xml";
}
return urls;
} catch (IOException e) {
logger.info("上传xml解析异常e:"+e.getMessage()+"\n"+e.getCause());
e.printStackTrace();
}
return null;
}
// 递归方法
public void parseElement(Element element, List<String> list) {
String str = "<" + element.getTagName();
NamedNodeMap attris = element.getAttributes();
for (int i = 0; i < attris.getLength(); i++) {
Attr attr = (Attr) attris.item(i);
str += " " + attr.getName() + "=\"" + attr.getValue() + "\"";
}
str += ">";
list.add(str);
NodeList nodeList = element.getChildNodes();
Node childNode;
for (int temp = 0; temp < nodeList.getLength(); temp++) {
childNode = nodeList.item(temp);
// 判断是否属于节点
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
// 判断是否还有子节点
if(childNode.hasChildNodes()){
parseElement((Element) childNode,list);
} else if (childNode.getNodeType() != Node.COMMENT_NODE) {
parseElement((Element) childNode,list);
}
}
}
list.add("</" + element.getTagName() + ">");
}
01-01
109
07-23
3009