我正在使用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工具。
答案 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撰稿人