在java中解析XML时没有工作ID属性
我目前正在开发一个图形化的XML编辑器,对于该编辑器,我必须能够通过其ID属性访问各个元素。 我已经建立了一个XML模式,在其中定义了ID属性。 我使用javax.xml.parsers.DocumentBuilderFactory,并通过相应的SchemaFactory将模式分配给它。到目前为止,我的XML文档的验证也有效,如果不遵循约束,我会收到错误消息。但是Attr.isId()总是返回false 提示可能是以下错误消息: 错误:URI=null行=2:文档根元素“TABS”必须与DOCTYPE根元素“null”匹配。 对我来说,这听起来像是解析器试图使用DTD而不是模式来验证XML文档。 我正在使用Java1.8 解析文档并加载模式在java中解析XML时没有工作ID属性,java,xml,validation,dom,Java,Xml,Validation,Dom,我目前正在开发一个图形化的XML编辑器,对于该编辑器,我必须能够通过其ID属性访问各个元素。 我已经建立了一个XML模式,在其中定义了ID属性。 我使用javax.xml.parsers.DocumentBuilderFactory,并通过相应的SchemaFactory将模式分配给它。到目前为止,我的XML文档的验证也有效,如果不遵循约束,我会收到错误消息。但是Attr.isId()总是返回false 提示可能是以下错误消息: 错误:URI=null行=2:文档根元素“TABS”必须与DOCT
生成的公共静态文档(IDocument xmlDocument){
字符串editorText=xmlDocument.get();
StringReader=新的StringReader(editorText);
InputSource InputSource=新的InputSource(读卡器);
DocumentBuilderFactory documentFactory=DocumentBuilderFactory.newInstance();
setSchema(文件工厂);
documentFactory.setValidating(true);
单据=空;
试一试{
DocumentBuilder=documentFactory.newDocumentBuilder();
document=builder.parse(inputSource);
}捕获(ParserConfiguration异常| SAXException | IOE异常){
//TODO错误处理
e、 printStackTrace();
}
归还文件;
}
私有静态void设置模式(DocumentBuilderFactory documentFactory){
URL URL=DomLoader.class.getResource(“..\\\\\\resources\\scriptGenerator.xsd”);
SchemaFactory SchemaFactory=SchemaFactory.newInstance(xmlstants.W3C\u XML\u SCHEMA\u NS\u URI);
Schema=null;
试一试{
schema=schemaFactory.newSchema(url);
}捕获(SAXE1异常){
//TODO错误处理
e1.printStackTrace();
}
documentFactory.setSchema(模式);
}
摘自模式定义
我的.xml文件
我的控制台输出,如果使用Attr.isId():
嗯,至少我找到了解决这个错误的办法
Error: URI=null Line=2: Document root element "TABS" must match DOCTYPE root "null"
如果使用DocumentFactory.setValidating(true)
DocumentBuilder实际上需要的是DTD而不是模式。因此,关闭此函数也会使错误消失。我修复了问题:错误位于.xsd文件的命名空间中。 以下是解决方案:
我还必须修复.xml文件的名称空间
Error: URI=null Line=2: Document root element "TABS" must match DOCTYPE root "null"