在xml中设置xmlschema

时间:2013-01-28 13:22:39

标签: java android xsd jibx

我正在使用jibx lib生成xsd到java代码。我也使用ant创建了jar文件。 我们需要设置xmlschemalocation,所以当我们执行marshalmessage时,我们可以获得xsd位置。

public String marshalMessage(Object message) 
    {
        try {
            IBindingFactory jc = BindingDirectory.getFactory(DeviceCapability.class);       

            IMarshallingContext marshaller = jc.createMarshallingContext();     

            ByteArrayOutputStream out = new ByteArrayOutputStream();        

            marshaller.marshalDocument(message, URL_ENCODING, null, out);
            return out.toString(STRING_ENCODING);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (JiBXException e) {
            e.printStackTrace();
        }
        return null;
    }

//这用于创建对象

DeviceCapability devicecapability  = new  DeviceCapability();
 devicecapability.setHref("Hello");
 String xml = marshalMessage(devicecapability);

  

生成的xml o / p是   ?xml version =“1.0”encoding =“UTF-8”?>   / DeviceCapability xmlns =“http://zigbee.org/sep”href =“Hello”//>

我想要o / p如下 ?xml version =“1.0”encoding =“UTF-8”?> DeviceCapability xmlns =“http://zigbee.org/sep”href =“Hello”xmlns:xsi =“http://www.w3.org / 2001 / XMLSchema-instance“xsi:schemaLocation =”http://zigbee.org/abc abc.xsd />

有人可以告诉我如何使用jibx添加schemalocation。我使用了ant codegen / bind工具。

1 个答案:

答案 0 :(得分:0)

JiBX轻松处理多个名称空间。您所要做的就是在模式定义(.xsd)文件中指定所有名称空间。例如,这是我的一个模式定义的片段:

  

< xs:import namespace =“http://javafx.com”schemaLocation =“javafx.xsd”/>
    < xs:element name =“jnlp”>
    < XS:的complexType>
    < XS:序列>
    < xs:element ref =“information”maxOccurs =“unbounded”/>
    < xs:element ref =“jfx:javafx-desc”minOccurs =“0”maxOccurs =“1”/>

    < / XS:序列GT;

JiBX生成的XML具有您想要的命名空间定义。

Don - JiBX撰稿人