Java org.xml.sax.SAXParseException:cvc elt.1:找不到元素';tns:root#u元素';
我在这上面花了两个小时。我无法找出发生此错误的原因。我有一个简单的xsd和xml代码 xml文件:Java org.xml.sax.SAXParseException:cvc elt.1:找不到元素';tns:root#u元素';,java,xml,xsd,schema,Java,Xml,Xsd,Schema,我在这上面花了两个小时。我无法找出发生此错误的原因。我有一个简单的xsd和xml代码 xml文件: <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name="root_element" type="string"/> </schema> 任何评论都会有帮助。关于我认为主要问题在于: dbf.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root_element" type="string"/>
</schema>
任何评论都会有帮助。关于我认为主要问题在于:
dbf.setValidating(true);
根据Java API:
指定此代码生成的解析器将进行验证
在解析文档时查看它们。默认情况下,该值设置为
错
注意这里的“验证”是指定义的验证解析器
在XML推荐中。换句话说,它本质上就是
控制DTD验证。(除了遗留的两个属性)
在JAXP 1.2中定义。)
使用现代模式语言,如W3CXMLSchema或RELAXNG
您可以将解析器配置为非验证解析器,而不是DTD
解析器将setValidating(boolean)方法保留为false,然后
使用setSchema(Schema)方法将架构与解析器关联
此外,您不需要:
dbf.setFeature(“http://apache.org/xml/features/validation/schema“,对);
您的工作代码可能只是(但是我不知道CommodityPropsErrorHandler
类中有什么):
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
SchemaFactory s_工厂=
SchemaFactory.newInstance(xmlstants.W3C_XML_SCHEMA_NS_URI);
dbf.setSchema(s_factory.newSchema(新文件(schemafile));
DocumentBuilder db=dbf.newDocumentBuilder();
CommodityPropsErrorHandler cp_eh=新的CommodityPropsErrorHandler();
db.setErrorHandler(cp_eh);
Document doc=db.parse(新文件(props_文件));
这里是第二种替代方法,使用前面的dbf.setValidating(true)代码>(即,使用JAXP中的这两个属性,在Java API中提到):
这一行用于使验证名称空间感知。否则,它将给出文档中不存在的元素
dbf.setNamespaceAware(true);
那不可能是全部。在某个地方有一个对命名空间前缀tns:
的引用,您还没有发布该前缀。
dbf.setValidating(true);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(true);
dbf.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
XMLConstants.W3C_XML_SCHEMA_NS_URI);
dbf.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource",
new File(schemafile));
DocumentBuilder db = dbf.newDocumentBuilder();
CommodityPropsErrorHandler cp_eh = new CommodityPropsErrorHandler();
db.setErrorHandler(cp_eh);
Document doc = db.parse(new File(props_file));
dbf.setNamespaceAware(true);