问题描述
比方我xsd中的格式是:<xs:elementref="ConstructStruct"/><xs:elementref="SummaryTable"/><xs:elementref="MeasureTable"/><xs:elementref="TechMeasureTable"/><xs:elementref="ResourceSumTable"/>xml的格式是:<ConstructStruct/><SummaryTable/><TechMeasureTable/><ResourceSumTable/><MeasureTable/>结果在做校验的时候出错:cvc-complex-type.2.4.a:Invalidcontentwasfoundstartingwithelement'ResourceSumTable'.Oneof'{MeasureTable}'isexpected.之后把xml中的节点位置调整与xsd一样后,校验没有问题了。检验方法是://建立schema工厂SchemaFactoryschemaFactory=SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");//建立验证文档文件对象,利用此文件对象所封装的文件进行schema验证FileschemaFile=newFile(xsdPath);//利用schema工厂,接收验证文档文件对象生成Schema对象Schemaschema=schemaFactory.newSchema(schemaFile);//通过Schema产生针对于此Schema的验证器,利用schenaFile进行验证Validatorvalidator=schema.newValidator();//得到验证的数据源Sourcesource=newStreamSource(xmlPath);//开始验证,成功输出success!!!,失败输出failvalidator.validate(source);求大神帮助,是不是校验方法出现问题了。
解决方案
解决方案二:
如果想让xml中的元素可以按任意顺序出现,需要在schema(xsd)配置all属性,http://www.w3school.com.cn/schema/el_all.asp<xs:all><xs:elementname="firstname"type="xs:string"/><xs:elementname="lastname"type="xs:string"/></xs:all>
解决方案三:
引用1楼u011564172的回复:
如果想让xml中的元素可以按任意顺序出现,需要在schema(xsd)配置all属性,http://www.w3school.com.cn/schema/el_all.asp<xs:all><xs:elementname="firstname"type="xs:string"/><xs:elementname="lastname"type="xs:string"/></xs:all>
<xs:all><xs:elementref="ConstructStruct"/><xs:elementref="SummaryTable"/><xs:elementref="MeasureTable"/><xs:elementref="JobList"minOccurs="0"maxOccurs="unbounded"/></xs:all>改掉之后,出现这个问题org.xml.sax.SAXParseException:cos-all-limited.2:The{maxoccurs}ofanelementinan'all'modelgroupmustbe0or1.Thevalue'-1'forelement'JobList'isinvalid.
解决方案四:
将<xs:elementref="JobList"minOccurs="0"maxOccurs="unbounded"/>改为<xs:elementref="JobList"minOccurs="0"maxOccurs="1"/>