如何告诉我的JAXB输出包含对创建它的XSD的引用?

时间:2011-10-24 16:26:41

标签: jaxb xsd

这是我的pages.xsd

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:mac="http://www.tvworks.com/tva/xml/ns/max/data-types" 
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

 <xs:import namespace="http://www.tvworks.com/tva/xml/ns/max/data-types" 
            schemaLocation="http://developer.tva.tvworks.com/xml/ns/max/data-types-3.2.xsd"/>


 <xs:element name="data">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="scenes" type="scenesType"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>

 <xs:complexType name="scenesType">
  <xs:sequence>
   <xs:element name="row" minOccurs="1" maxOccurs="unbounded">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="page" type="mac:page-ref"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>
</xs:schema>

这是我的pages.xjb

<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          version="2.1">
    <bindings schemaLocation="pages.xsd" version="1.0"">
        <schemaBindings>
            <package name="com.mycompany.pages"/>
        </schemaBindings>
    </bindings>
</bindings>

以下是我想要输出的内容,请注意xsi:noNamespaceSchemaLocation="pages.xsd"

<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="pages.xsd">
 <scenes>
  <row>
   <page>page1</page>
  </row>
  <row>
   <page>page2</page>
  </row>
    <row>
   <page>page3</page>
  </row>
    <row>
   <page>page4</page>
  </row>
 </scenes>
</data> 

如何自动将该属性放到JAXB输出的data元素上?

1 个答案:

答案 0 :(得分:3)

使用jaxb.noNamespaceSchemaLocation上的所需值设置属性Marshaller

编辑:有关其他信息,请查看Marshaller documentation以及method setProperty中支持的属性部分。