java xsd校验xml时,因为xml节点位置问题出错

问题描述

比方我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"/>

时间: 2024-12-17 10:48:33

java xsd校验xml时,因为xml节点位置问题出错的相关文章

java xml-保存XML文件时丢失实体节点&amp;amp;lt;!ENTITY&amp;amp;gt;怎么办?

问题描述 保存XML文件时丢失实体节点<!ENTITY>怎么办? <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE root[ <!ENTITY root "D:时间" > ]> &root;18:02 如上面的conf.xml文件.可以读取得到time节点是内容是 "D:时间18

XMLSpy编辑工具中设置XML的DTD/XSD校验指向本地,而不要直接指向网络去

http://yulimin.javaeye.com/blog/24495 关键字:   XML DTD XSD 校验     XMLSpy编辑工具中如何设置XML的DTD/XSD校验指向本地,而不要直接指向网络去? 前提:在不修改XML的条件下,修改XML的,不要这个,这个变态的谁都会... 其它的工具及另外的方法如下,但是想获取到类似XMLBuddy的cache一样的功能.何办? XMLBuddy 由于打开XML文件时会根据XML文件里定义的DTD去网上查找相应的DTD文件,这样导至打开的时

这里转贴一个使用java在处理xml时遇到中文问题的解决方法

xml|解决|问题|中文 ------------author:wait4friend------------ 共有三种方法,分别使用了JDK, xerces.jar或jdom.jar.直接贴出原码: /** *  Use this program to indicate how to save a XML file, resolving the problem *  about CharacterSet, I mean GB2312 here can be dealt with correct

java doom4j怎么解析xml下同一根节点的相同子节点

问题描述 javadoom4j怎么解析xml下同一根节点的相同子节点 解决方案 解决方案二:用xmlDocument.getElementsByTagName("子节点标签名")这个方法不行吗?解决方案三:得到根节点之后,使用循环就可以得到得到所有子节点啊.解决方案四:循环判断..解决方案五:可以根据名字获取所有子节点.解决方案六:类似代码Elementroot=document.getRootElement();IteRator<Element>eles=root.ele

xsd schema xml-xsd schema 验证 xml 同名元素 不同样式问题?

问题描述 xsd schema 验证 xml 同名元素 不同样式问题? xsd 验证 xml时,假如一个节点有不同的样式,并且想严格 控制 如:xs:schemaxs:complexType ....... 这里面的元素个数是不一样的,所以想让是可 选择的,但是name是一样的. /xs:b /xs:element/xs:complexType 请问怎么解决?

java学习:使用dom4j读写xml文件

dom4j是一个优秀的开源项目,专用于xml文件的读写,而且支持强大的xpath. 下面的代码演示了对xml文件demo.xml的读写 demo.xml内容: 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <address-list> 3 <card name="yangjm" id="1"> 4 <sex>男</sex> 5

适用于Java程序员的10道XML面试题 新鲜出炉_java

包括web开发人员的Java面试在内的各种面试中,XML面试题在各种编程工作的面试中很常见.XML是一种成熟的技术,经常作为从一个平台到其他平台传输数据的标准.XML面试问题包括用于转换XML文件的XSLT技术,XPATH,XQuery等各种XML技术和XML基础知识,比如DTD或者Schema. 本文将看到10道常见的XML面试问答题.这些问题大部分在Java面试中会问到,同时在C,C++,Scala或其他语言的编程面试中同样很有用处.XML并不依赖于其他编程语言,同SQL一样是编程人员所需要

java程序-Java程序,我建立个xml报文先转换成GBK,之后加密,再用UTF8传输发给外系统,中文出现乱码!

问题描述 Java程序,我建立个xml报文先转换成GBK,之后加密,再用UTF8传输发给外系统,中文出现乱码! Document d = DocumentHelper.createDocument(); Element transaction = d.addElement("transaction"); //根节点 Element header = transaction.addElement("header"); //报文头 header.addElement(&

Testng.xml文件结构组成及节点属性说明

testng.xml文件结构: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="suitename" junit="false" verbose="3" parallel="f