cvc-complex-type.3.2.2:属性xsi:不允许在Java DOM中出现schem
发布时间:2020-12-15 04:10:08 所属栏目:Java 来源:网络整理
导读:我试图通过使用DOM验证器在 Java中使用XSD验证我的XML. 虽然我手动地知道该文档确实有效,但DOM验证器还是对我说: cvc-complex-type.3.2.2: Attribute xsi:schemaLocation is not allowed to appear in the element people 我已经确定: setNamespaceAware()
我试图通过使用DOM验证器在
Java中使用XSD验证我的XML.
虽然我手动地知道该文档确实有效,但DOM验证器还是对我说: cvc-complex-type.3.2.2: Attribute <xsi:schemaLocation> is not allowed to appear in the element <people> 我已经确定: ?SSCCE import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; public class DOMValidator { String xmlInstance = null; String xmlSchema = null; public static void main(String[] args){ DOMValidator validator = new DOMValidator(); validator.validateXML("student.xsd","helloWorld.xml"); } public void validateXML(String xsd,String xml){ xmlSchema = xsd; xmlInstance = xml; beginValidation(); } public void beginValidation(){ try{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(true); factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage","http://www.w3.org/2001/XMLSchema"); factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource",xmlSchema); ErrorHandler errorHandler = new ErrorHandler(); DocumentBuilder builder = factory.newDocumentBuilder(); builder.setErrorHandler(errorHandler); builder.parse(xmlInstance); if(errorHandler.errorOccured == true){ System.out.println("Document is Invalid."); System.out.println(errorHandler.ex.getMessage()); }else{ System.out.println("Doument is valid"); } }catch(ParserConfigurationException e){ e.printStackTrace(); }catch(SAXException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } private class ErrorHandler extends DefaultHandler{ public SAXParseException ex = null; public boolean errorOccured = false; @Override public void error(SAXParseException ex){ this.ex = ex; errorOccured = true; } @Override public void fatalError(SAXParseException ex){ this.ex = ex; errorOccured = true; } @Override public void warning(SAXParseException ex){ this.ex = ex; errorOccured = true; } } } ?XSD <xs:schema xmlns:xs="http://www.w3c.org/2001/XMLSchema" xmlns="http://www.cmu.edu/ns/blank" targetNamespace="http://www.cmu.edu/ns/blank" elementFormDefault="qualified"> ?XML <people xmlns="http://www.cmu.edu/ns/blank" xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cmu.edu/ns/blank student.xsd"> 我该如何解决这个问题? 解决方法
问题出在这里:
<xs:schema xmlns:xs="http://www.w3c.org/2001/XMLSchema" .....> 和 <people xmlns="http://www.cmu.edu/ns/blank" xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"....> 问题是w3c.org中的c. DOM解析器希望它在任何地方都是w3.org–在XML文档中,在XML Schema Document中,在schemaLanguage和schemaSource属性中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 为什么ArrayList在从多个线程修改时不会抛出Concur
- java – Smack Client – 尽管连接中止,用户仍然在线
- JAVA:http发布请求
- java – 迁移到Tomcat 8:InstanceAlreadyExistsException数
- java – 在注释中使用变量/表达式(在Thymeleaf模板中)
- java – 有效的anagrams代码 – 32个案例中的一个案例失败.
- 跟网络相关的Android工具类
- Spring实现动态修改时间参数并手动开启关停操作
- 使用新的Java 8 DateTimeFormatter来进行严格的日期解析
- SpringBoot多配置切换的配置方法