我正在寻找一个用于编码/解码EXI (Efficient XML Interchange)流的Java示例程序,使用EXIficient或OpenEXI。
有人能帮帮忙吗?我似乎找不到一个示例应用程序。
编辑:或者,如果有人能给我指出允许我使用EXIficient或OpenEXI的文档,那将是很有帮助的。我找到了javadoc,但我不知道该使用哪个类。
或者,正如@StaxMan指出的那样,是否特别提到/讨论了与标准XML一起使用的适当的顶级类?
发布于 2015-07-08 09:21:08
使用Exificient,我已经成功地使用他们的"Help" page和their "demo"中的代码片段将示例XML编码和解码为EXI,我已经成功地仅使用Maven依赖项完成了以下工作
<dependency>
<groupId>com.siemens.ct.exi</groupId>
<artifactId>exificient</artifactId>
<version>0.9.4</version>
</dependency>使用代码
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));
}
}使用Maven XSD和Spring 4.1.6 POM from Maven central作为示例数据。
Nb:输出XML应该等同于输入,但不一定相等,因为注释和空格丢失了,并且名称空间别名(?可能在这里使用了错误的术语)是任意分配的。
发布于 2011-07-01 07:30:44
我对提到的两个库并不熟悉;但我假设它们实现了一种著名的Java XML处理API,比如SAX、Stax或DOM (可能带有一些扩展名)。这是因为EXI只是标准XML Infoset的不同编码;因此对于应用程序开发人员来说,事情看起来可能与正常的XML处理完全一样。
因此,您可能只需要找出他们实现的API,并找到使用该API的教程?
发布于 2011-07-01 05:49:24
您可以使用EXIfiecient代码库中的作为示例。
https://stackoverflow.com/questions/6540474
复制相似问题