Java 从WSDL提取XSD时,根元素后面文档中的标记必须格式良好

Java 从WSDL提取XSD时,根元素后面文档中的标记必须格式良好,java,xml,web-services,xml-parsing,xsd,Java,Xml,Web Services,Xml Parsing,Xsd,我试图读取WSDL,提取导入/内联的模式,并将所有这些内容放入一个模式文件中(提取标记之间的字符串) 执行此操作时,我遇到以下错误: [致命错误]:1:416:文档中根元素后面的标记必须格式正确。您的XML格式不正确,因为您需要一个根元素。你的文件有两个! 如果将它们放在一个根下,您将获得格式良好的XML(但不一定是有效的XML,因为这取决于您将如何使用它): ... ... 将两个模式中的定义组合在一起的有效方法是将它们的内容包含在一个模式中,并将作为根元素: <xsd:sche

我试图读取WSDL,提取导入/内联的模式,并将所有这些内容放入一个模式文件中(提取标记之间的字符串)

执行此操作时,我遇到以下错误:


[致命错误]:1:416:文档中根元素后面的标记必须格式正确。

您的XML格式不正确,因为您需要一个根元素。你的文件有两个! 如果将它们放在一个根下,您将获得格式良好的XML(但不一定是有效的XML,因为这取决于您将如何使用它):


... 
... 
将两个模式中的定义组合在一起的有效方法是将它们的内容包含在一个模式中,并将
作为根元素:

<xsd:schema ...>
    <xsd:complexType ...> ... </xsd:complexType>
    <xsd:element ...> ... </xsd:element>
</xsd:schema>

... 
... 
但它是否有效取决于您的命名空间定义。如果两个架构的目标命名空间相同,则可以将它们保存在不同的文件中,并使用
将其中一个包含在另一个文件中。对于不同的名称空间,您可以使用
将限定元素从第二个架构导入第一个架构:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:import namespace="services/data/common" schemaLocation="your-second-schema.xsd"/>
    <xsd:complexType name="NoNamespaceType">...</xsd:complexType>
    ...
</xsd:schema>

...
...
这将允许您使用它来验证使用第二个架构中的元素的实例,只要它们是使用命名空间限定的:

<d:request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="your-first-schema.xsd" xmlns:d="services/data/common">
    <d:header></d:header>
    <d:body></d:body>
</d:request>

以及使用无命名空间架构的非限定元素:

<noNamespace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="your-first-schema.xsd">
    <firstElement></firstElement>
    <secondElement></secondElement>
</noNamespace>

感谢您的澄清,如果我遇到一个案例,其中WSDL包含内联模式和导入模式,并且考虑到我需要一个模式文件来验证请求XML(可能包含来自多个模式中的任何一个的元素),那么还有一个问题,那么我应该怎么做呢?如果我直接提取两者之间的字符串,我会得到上面的错误。我想创建一个有效的、格式良好的模式文件,其中包含WSDL的内联模式和导入的模式。
<noNamespace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="your-first-schema.xsd">
    <firstElement></firstElement>
    <secondElement></secondElement>
</noNamespace>