编码/解码EXI的java示例?
我正在寻找一个Java示例程序,用于使用或对流进行编码/解码 有人能帮忙吗?我似乎找不到示例应用程序 编辑:或者,如果有人能向我指出允许我使用EXIficient或OpenEXI的文档,那将是很有帮助的。我找到了javadoc,但我不知道该使用哪些类编码/解码EXI的java示例?,java,xml,exi,exificient,openexi,Java,Xml,Exi,Exificient,Openexi,我正在寻找一个Java示例程序,用于使用或对流进行编码/解码 有人能帮忙吗?我似乎找不到示例应用程序 编辑:或者,如果有人能向我指出允许我使用EXIficient或OpenEXI的文档,那将是很有帮助的。我找到了javadoc,但我不知道该使用哪些类 或者,正如@StaxMan所指出的,是否特别提到/讨论了与标准XML API之一一起使用的适当顶级类?现有的代码库中有一些可用作示例。我不熟悉提到的两个库;但我假设,作为任何一个健全的XML库,它们实现了一个众所周知的Java XML处理API,如
或者,正如@StaxMan所指出的,是否特别提到/讨论了与标准XML API之一一起使用的适当顶级类?现有的代码库中有一些可用作示例。我不熟悉提到的两个库;但我假设,作为任何一个健全的XML库,它们实现了一个众所周知的Java XML处理API,如SAX、Stax或DOM(可能有一些扩展)。这是因为EXI只是标准XMLInfoset的不同编码;因此,对于应用程序开发人员来说,事情可能与正常的XML处理完全相同
因此,您可能只需要了解他们实现的API,并找到使用该API的教程?下面总结了使用OpenEXI的方法,其中包括步骤2和步骤3 是可选的
takiOpenEXI现在提供了如何使用它编程的教程[1] [1] 此外,这篇OpenEXI讨论论坛帖子[2]展示了使用“EXIReader”SAXXMLReader实现将二进制XML转换为(JaXB)Java对象的代码: [2] 使用,我成功地使用他们的代码片段将示例XML编码和解码为EXI,并且,我仅使用Maven依赖项就成功地完成了以下工作
<dependency>
<groupId>com.siemens.ct.exi</groupId>
<artifactId>exificient</artifactId>
<version>0.9.4</version>
</dependency>
使用和作为示例数据
Nb:输出XML应该等同于输入,但不一定相等,因为注释和空格丢失,命名空间别名(?这里可能使用了错误的术语)被任意分配。很酷,谢谢,这就是我一直在寻找的东西。因此,EXIficient至少实现了Stax(javax.xml.stream)接口,对吗?链接是404。EXIficient已经转移到github…这正是我试图回答的问题。对,只是你没有明确询问他们可能实现哪些API,哪些API更容易回答(尽管project web页对这一重要信息似乎出人意料地沉默)。所以我想我会提到它以防万一。好吧,很公平——我会编辑我的问题。OpenEXI实现了一些标准的XML处理API吗?还是只是通过专有接口实现的?SAX API很快就会出现。在编码方面,它已经支持SAX。Transmogrifier的GetSAXSTransmogrifier()方法返回SAX处理程序。在解码端,一个使SAX为基础的解码器层性能的基础本周刚刚就位,而基于SAX的DooAPI API的最终工作仅需一周或一周的时间,这取决于劳动力的可用性。
import com.siemens.ct.exi.EXIFactory;
import com.siemens.ct.exi.GrammarFactory;
import com.siemens.ct.exi.api.sax.EXIResult;
import com.siemens.ct.exi.api.sax.EXISource;
import com.siemens.ct.exi.helpers.DefaultEXIFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
// based on: https://sourceforge.net/p/exificient/code/HEAD/tree/tags/exificient-0.9.4/src/sample/java/EXIficientDemo.java?format=raw
public class MinimalistExificientSample {
static final boolean USE_SCHEMA = true;
public static void main(String[] args) throws Exception{
File xmlIn = new File( "/home/artb/spring-core-4.1.6.RELEASE.pom.xml" );
FileInputStream xmlIns = new FileInputStream( xmlIn );
File exi = new File( "/home/artb/spring-core-4.1.6.RELEASE.pom." +(USE_SCHEMA? "schema":"schemaless")+ ".exi" )
FileOutputStream exiOuts = new FileOutputStream( exi );
File xmlOut = new File( "/home/artb/spring-core-4.1.6.RELEASE.pom." +(USE_SCHEMA? "schema":"schemaless")+ ".xml" );
//settings
EXIFactory exiFactory = DefaultEXIFactory.newInstance();
exiFactory.setGrammars( GrammarFactory.newInstance().createGrammars( "/home/artb/maven-4.0.0.xsd" ) );
// encode
InputSource xmlIs = new InputSource( xmlIns );
EXIResult exiResult = USE_SCHEMA ? new EXIResult(exiFactory) : new EXIResult();
exiResult.setOutputStream( exiOuts );
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler( exiResult.getHandler() );
xmlReader.parse( xmlIs );
// decode
FileOutputStream xmlOuts = new FileOutputStream( xmlOut );
FileInputStream exiIns = new FileInputStream( exi );
InputSource exiIs = new InputSource( exiIns );
EXISource exiSource = USE_SCHEMA ? new EXISource(exiFactory) : new EXISource();
exiSource.setInputSource(exiIs);
exiSource.setXMLReader( exiSource.getXMLReader() );
TransformerFactory.newInstance().newTransformer().transform(exiSource, new StreamResult(xmlOuts));
}
}