0

我正在使用 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 添加模式定位。我使用过 ant codegen/bind 工具。

4

1 回答 1

0

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

<xs:import namespace="http://javafx.com" schemaLocation="javafx.xsd"/>
<xs:element name="jnlp">
<xs:complexType>
<xs:sequence>
<xs:element ref= "信息" maxOccurs="unbounded"/>
<xs:element ref="jfx:javafx-desc" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

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

Don - JiBX 贡献者

于 2013-01-30T04:46:19.587 回答