首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于编码/解码EXI的java示例?

用于编码/解码EXI的java示例?
EN

Stack Overflow用户
提问于 2011-07-01 04:06:35
回答 5查看 4.5K关注 0票数 5

我正在寻找一个用于编码/解码EXI (Efficient XML Interchange)流的Java示例程序,使用EXIficientOpenEXI

有人能帮帮忙吗?我似乎找不到一个示例应用程序。

编辑:或者,如果有人能给我指出允许我使用EXIficient或OpenEXI的文档,那将是很有帮助的。我找到了javadoc,但我不知道该使用哪个类。

或者,正如@StaxMan指出的那样,是否特别提到/讨论了与标准XML一起使用的适当的顶级类?

EN

回答 5

Stack Overflow用户

发布于 2015-07-08 09:21:08

使用Exificient,我已经成功地使用他们的"Help" pagetheir "demo"中的代码片段将示例XML编码和解码为EXI,我已经成功地仅使用Maven依赖项完成了以下工作

代码语言:javascript
复制
<dependency>
    <groupId>com.siemens.ct.exi</groupId>
    <artifactId>exificient</artifactId>
    <version>0.9.4</version>
</dependency>

使用代码

代码语言:javascript
复制
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 XSDSpring 4.1.6 POM from Maven central作为示例数据。

Nb:输出XML应该等同于输入,但不一定相等,因为注释和空格丢失了,并且名称空间别名(?可能在这里使用了错误的术语)是任意分配的。

票数 4
EN

Stack Overflow用户

发布于 2011-07-01 07:30:44

我对提到的两个库并不熟悉;但我假设它们实现了一种著名的Java XML处理API,比如SAX、Stax或DOM (可能带有一些扩展名)。这是因为EXI只是标准XML Infoset的不同编码;因此对于应用程序开发人员来说,事情看起来可能与正常的XML处理完全一样。

因此,您可能只需要找出他们实现的API,并找到使用该API的教程?

票数 2
EN

Stack Overflow用户

发布于 2011-07-01 05:49:24

您可以使用EXIfiecient代码库中的作为示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6540474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档