基于java处理ofd格式文件

一、ofd格式介绍

基于java处理ofd格式文件_第1张图片

国家发布过一份关于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

你可能感兴趣的:(技术,xml,dom,java,zip,stream)