我有一个引用的XSD文件和元素xs:schema
。当我运行连接到Internet的xjc
时,它会创建相应的JAXB对象。当我尝试将XMLSchema.xsd
作为本地文件引用时,它会失败。
如何引用XMLSchema.xsd
的本地xsd文件副本,以便我可以离线运行xjc
来创建JAXB类?
目前我致电xjc -d out schema0.xsd schema1.xsd
Schema0.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com" xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>
<xs:element name="children">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="childname" />
<xs:element ref="xs:schema" />
<xs:any />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Schema1.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd" />
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:3)
下载XMLSchema.xsd ...
curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://www.w3.org/2001/XMLSchema.xsd > XMLSchema-new.xsd
从...中删除文件的第一部分
<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA.....
.... To ....
<!ATTLIST xs:union id ID #IMPLIED>
]>
下载XMLSchema.xsd引用的xml.xsd文件....
curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://www.w3.org/2001/xml.xsd > xml-new.xsd
创建目录文件....
catalog.cat
SYSTEM "http://www.w3.org/2001/XMLSchema" "XMLSchema-new.xsd"
PUBLIC "http://www.w3.org/2001/XMLSchema" "XMLSchema-new.xsd"
PUBLIC "http://www.w3.org/XML/1998/namespace" "xml.xsd"
断开互联网连接并运行xjc -catalog catalog.cat schema0.xsd schema1.xsd
感谢Blaise详细article。我无法删除XMLSchema.xsd的<!DOCTYPE
部分,这导致xjc失败。