Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
无法根据xsd验证xml。“错误”;cvc elt.1:找不到元素';系统'&引用;_Xml_Xsd - Fatal编程技术网

无法根据xsd验证xml。“错误”;cvc elt.1:找不到元素';系统'&引用;

无法根据xsd验证xml。“错误”;cvc elt.1:找不到元素';系统'&引用;,xml,xsd,Xml,Xsd,我无法通过代码使用XSD验证XML。我不知道我错过了什么 XML: 提前谢谢! Lori此实例应进行验证。您的属性属于架构,因此需要使用名称空间将其标记为: <?xml version="1.0" encoding="UTF-8"?> <systems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="test.namespace"> <system a:address

我无法通过代码使用XSD验证XML。我不知道我错过了什么 XML:

提前谢谢!
Lori

此实例应进行验证。您的属性属于架构,因此需要使用名称空间将其标记为:

<?xml version="1.0" encoding="UTF-8"?>
<systems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="test.namespace">
   <system a:address="test" a:id="test" a:name="test" a:systemNr="test" xmlns:a="test.namespace">
      <mandant a:mandant="test"/>
   </system>
   ...
</systems>

...

我假设您的
元素中有
attributeFormDefault=“qualified”
elementFormDefault=“qualified”
,此实例应进行验证。您的属性属于架构,因此需要使用名称空间将其标记为:

<?xml version="1.0" encoding="UTF-8"?>
<systems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="test.namespace">
   <system a:address="test" a:id="test" a:name="test" a:systemNr="test" xmlns:a="test.namespace">
      <mandant a:mandant="test"/>
   </system>
   ...
</systems>

...

我假设您的
元素中有
attributeFormDefault=“qualified”和
elementFormDefault=“qualified”

可能与名称空间有关?抱歉,看起来我没有从XSD文档复制模式定义标记。这里是:可能与名称空间有关?抱歉,看起来我没有从XSD文档中复制模式定义标记。这里是:尝试过,不起作用。我认为这与systems标签有关,因为我很抱歉错误是“cvc elt.1:找不到元素'systems'的声明”。我的模式元素中有elementFormDefault=“qualified”。我已经在上面贴了一条关于这个元素的评论,由于某些原因,它没有出现在我的帖子中。为你修复了这个问题。你的实例是完全有效的,所以我认为问题一定在你的代码中。你是对的,问题出在validator.validate(newdomsource(systemsDocument));使用validator.validate(新的StreamSource(systemsFile));它起作用了。非常感谢。Oracle的帮助中心示例是垃圾,因为它使用DOMSource进行了完全相同的调用,但不起作用。试过了,没用。我认为这与systems标签有关,因为我很抱歉错误是“cvc elt.1:找不到元素'systems'的声明”。我的模式元素中有elementFormDefault=“qualified”。我已经在上面贴了一条关于这个元素的评论,由于某些原因,它没有出现在我的帖子中。为你修复了这个问题。你的实例是完全有效的,所以我认为问题一定在你的代码中。你是对的,问题出在validator.validate(newdomsource(systemsDocument));使用validator.validate(新的StreamSource(systemsFile));它起作用了。非常感谢。Oracle的帮助中心示例是垃圾,因为它使用DOMSource进行了完全相同的调用,但不起作用。
      File systemsFile = new File(LocalFileSystemManager.getDefaultPath() + "Systems.xml");
      File schemaFile = new File(LocalFileSystemManager.getDefaultPath() + "SystemsSchema.xsd");
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      Document systemsDocument = db.parse(systemsFile);
      systemsDocument.getDocumentElement().normalize();
SchemaFactory factory = SchemaFactory
      .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
      Schema schema = factory.newSchema(schemaFile);
      Validator validator = schema.newValidator();
      validator.validate(new DOMSource(systemsDocument));
<?xml version="1.0" encoding="UTF-8"?>
<systems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="test.namespace">
   <system a:address="test" a:id="test" a:name="test" a:systemNr="test" xmlns:a="test.namespace">
      <mandant a:mandant="test"/>
   </system>
   ...
</systems>