一、ofd格式介绍
国家发布过一份关于ofd编码格式的资料,本来我想传上去的发现资源重复了,你们可以找找看,没有的话留个邮箱,我看到会发给你们的
ofd本质上其实是一个压缩文件,咱们把他当做一个压缩包来处理就好了,思路是先解压,对解压后的文件进行解析处理,解压后是xml文件,java有很多处理xml的类,这里我推荐dom4j,原因是相对来说功能全、速度快,处理完后再进行压缩,保存为ofd格式即可
ofd的阅读器我也有,只是是公司的,不方便共享了,大家可以找网上在线阅读器
二、xml处理工具类
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*
* DOM4J类
DOM4J定义了几个Java类。以下是最常见的类:
Document - 表示整个XML文档。文档Document对象是通常被称为DOM树。
Element - 表示一个XML元素。 Element对象有方法来操作其子元素,它的文本,属性和名称空间。
Attribute - 表示元素的属性。属性有方法来获取和设置属性的值。它有父节点和属性类型。
Node - 代表元素,属性或处理指令
常见DOM4J的方法
当使用DOM4J,还有经常用到的几种方法:
SAXReader.read(xmlSource)() - 构建XML源的DOM4J文档。
Document.getRootElement() - 得到的XML的根元素。
Element.node(index) - 获得在元素特定索引XML节点。
Element.attributes() - 获取一个元素的所有属性。
Node.valueOf(@Name) - 得到元件的给定名称的属性的值。
*
* */
public class OfdXmlUtil {
public static String ids = "";
public static String getAttributeIdByPath(String path,String attribute) throws Exception {
List<XmlEntity> xmlList = readXmlByPath(path);
int mediaId = 0;
for (XmlEntity xml : xmlList) {
if (xml.getNode().equals(attribute) && xml.getAttributes().get("ID") != null) {
mediaId = mediaId>Integer.parseInt(xml.getAttributes().get("ID"))?mediaId:Integer.parseInt(xml.getAttributes().get("ID"));
}
}
String id=String.valueOf(mediaId+1);
return id;
}
public static String getId(Element node, String element) {
if(node.getName().equals(element)) {
ids = node.valueOf("id");
}
// 当前节点下面子节点迭代器
Iterator<Element> it = node.elementIterator();
// 递归遍历
while (it.hasNext()) {
// 获取某个子节点对象
Element e = it.next();
// 对子节点进行遍历
getId(e, element);
}
return ids;
}
public static String getLastIdByElement(String path, String element) throws Exception {
File file = new File(path);
// 创建saxReader对象
SAXReader reader = new SAXReader();
Document document = reader.read(file);
// 获取根节点元素对象
Element node = document.getRootElement();
String str = getId(node, element);
return str;
}
/**
*
* @param path
* @return
* @throws Exception
*/
public static List<XmlEntity> readXmlByPath(String path) throws Exception {
File file = new File(path);
List