cvc-complex-type.2.4.a:从元素' ProcessDesc'开始发现无效内容。 ProcessName之一

时间:2014-08-07 04:44:58

标签: xml jaxb schema xsd

我通过Validator类验证我的jaxb对象。下面是我用来验证jaxb对象的代码。但在验证它时,我收到了这个错误。

jc = JAXBContext.newInstance(obj.getClass());
source = new JAXBSource(jc, obj);
Schema schema = schemaInjector.getSchema();
Validator validator = schema.newValidator();
validator.validate(source);

错误(SAXParseException):cvc-complex-type.2.4.a:找到以元素' ProcessDesc'开头的无效内容。 ProcessName的一个预期

我不明白我在xsd中做错了什么导致了这个错误。我的xsd文件中定义的元素在下面,我收到错误。

<xs:schema xmlns:cc="http://www.ms.com/cm.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ms.com/cm.xsd" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="Process">
<xs:sequence>
<xs:element name="ProcessId" type="xs:int" />
<xs:element name="ProcessName" type="xs:string" />
<xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>

请帮我解决这个问题。谢谢。

6 个答案:

答案 0 :(得分:20)

XML Sehema代码

<xs:complexType name="Process">
  <xs:sequence>
    <xs:element name="ProcessId" type="xs:int" />
    <xs:element name="ProcessName" type="xs:string" />
    <xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
  </xs:sequence>
</xs:complexType>

描述了一些应该看起来像

的XML
<proc> <!-- of type Process -->
  <ProcessId>123</ProcessId>
  <ProcessName>procA</ProcessName>
  <ProcessDesc>A funny process</ProcessDesc> <!-- this could be omitted -->
<proc>

但您的XML数据看起来像

<proc> <!-- of type Process -->
  <ProcessId>123</ProcessId>
  <ProcessDesc>A funny process</ProcessDesc>
  <!-- ... don't know what follows -->

如果您不关心Id,Name,Desc的顺序,则必须更改XML架构。否则你将不得不修复XML(这更容易)。

如果您认为“任何元素顺序”是个好主意,请使用:

<xs:complexType name="Process">
  <xs:all>
    <xs:element name="ProcessId" type="xs:int" />
    <xs:element name="ProcessName" type="xs:string" />
    <xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
  </xs:all>
</xs:complexType>

答案 1 :(得分:4)

这类错误是由于以下原因之一

  

元素名称输入错误。

     

尝试使用架构中未描述的元素。

     

元素的顺序不正确。

     

在根标记或父标记中声明的命名空间定义   元素不匹配中使用的前缀(或没有前缀)   元件。

答案 2 :(得分:1)

如果使用序列,则必须保持每个元素的顺序

定义和用法 sequence元素指定子元素必须出现在序列中。每个子元素可以从0到任意次出现。

请参阅here

答案 3 :(得分:1)

这是一个简单的XSD验证错误... w3c

答案 4 :(得分:0)

另一个选项是违反约束,当您根据需要设置字段时,它是记录中的NULL。检查您的XSD的{​​{1}}元素属性。

答案 5 :(得分:0)

我得到这个问题固定ITR Utility软件(如在所提到incomeTaxReturnUtilities

某些字段被错误地在本节填充: audit-report

如果填写我们需要输入部门代码,日期等所有细节留给其他未填。