Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中解析XML时没有工作ID属性_Java_Xml_Validation_Dom - Fatal编程技术网

在java中解析XML时没有工作ID属性

在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

我目前正在开发一个图形化的XML编辑器,对于该编辑器,我必须能够通过其ID属性访问各个元素。 我已经建立了一个XML模式,在其中定义了ID属性。 我使用javax.xml.parsers.DocumentBuilderFactory,并通过相应的SchemaFactory将模式分配给它。到目前为止,我的XML文档的验证也有效,如果不遵循约束,我会收到错误消息。但是Attr.isId()总是返回false

提示可能是以下错误消息: 错误:URI=null行=2:文档根元素“TABS”必须与DOCTYPE根元素“null”匹配。 对我来说,这听起来像是解析器试图使用DTD而不是模式来验证XML文档。 我正在使用Java1.8

解析文档并加载模式

生成的公共静态文档(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"