我有一个XSD格式:
<?xml version="1.0" encoding="utf-16"?>
<root>
<xs:schema --->
..
..
</xs:schema>
<xs:schema -->
..
..
</xs:schema -->
<xs:schema -->
..
..
</xs:schema -->
</root>
在第1行使用XJC编译器编译时出现错误“prolog中不允许使用内容”。 如果我将编码更改为“ISO-8859-1”
它给出了跟随错误:
[ERROR] Unexpected <root> appears at line 2 column 10
line 2 of ****.xsd Failed to parse a schema.
如果我从XSD中删除“root”标记,它会开始出现以下错误:
[ERROR] The markup in the document following the root element must be well-formed.
line 44 of file:****.xsd
无法解析架构。
我的问题是我们是否可以使用XJC编译具有多个架构标记的XSD。我曾尝试使用以下文件格式:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="abc" type="xs:string"/>
<xs:element name="cdf">
/xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
它完全适合上述,适当地创建类。
是否与命名空间声明有关?
答案 0 :(得分:0)
原则上,XSD规范允许多个xs:schema元素包含在同一个XML文档中,因此您尝试执行的操作并非不合理。实际上,许多XSD软件(可能是大多数XSD软件)都没有为模式文档做好准备,其中xs:schema元素不是XML文档中最外层的元素,即使软件确实支持其他情况,不同的程序也不会我总是同意如何表现。
请参阅this Stack Overflow question进一步讨论,包括来自被误导的一方的充满激情的论点,即根本没有支持您所描述类型的输入的XSD软件。
使用XJC,您最好的选择似乎是将每个xs:schema元素放在一个单独的XML文档中,并使用(a)单个驱动程序文件来导入或依次包含它们,或者(b)将它们放入所有在同一目录下并手XJC目录的名称;它将扫描目录中的模式文件并进行编译。您也可以使用-wsdl
选项执行某些操作。