微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java在<导入名称空间>中加载本地xsd文件

如何解决Java在<导入名称空间>中加载本地xsd文件

我尝试加载本地xsd文件import...schemaLocation="gml.xsd",但是似乎没有任何作用,因为我总是遇到相同的错误

org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 122; src-resolve: Cannot resolve the name 'gml:AbstractFeature' to a(n) 'element declaration' component.

config.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:pcrs="http://cnig.gouv.fr/pcrs" xmlns:pcrs-i="http://cnig.gouv.fr/pcrs-information" targetNamespace="http://cnig.gouv.fr/pcrs" elementFormDefault="qualified" version="2.0beta2">
    <import namespace="http://cnig.gouv.fr/pcrs-information" schemaLocation="CNIG_PCRS-INFO_v2.0.xsd"/>
    <import namespace="http://www.opengis.net/gml/3.2" schemaLocation="gml.xsd"/>
    <!--XML Schema document created by ShapeChange - http://shapechange.net/-->
    <element name="AffleurantEnveloppePCRS" type="pcrs:AffleurantEnveloppePCRSType" substitutionGroup="gml:AbstractFeature">

java:

    ClassLoader classloader = Thread.currentThread().getContextClassLoader();
    InputStream xsd = classloader.getResourceAsstream("gml/config.xsd");
    InputStream gml = classloader.getResourceAsstream("gml/test.gml");

    public boolean validateXSD() {
            try {
                SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
                Schema schema = factory.newSchema(new StreamSource(xsd));
                Validator validator = schema.newValidator();
                validator.validate(new StreamSource(gml));
                return true;
            } catch (Exception error) {
                System.out.println(error);
                return false;
            }
        }

解决方法

由于要提供字节流,因此XML库不知道文件位于何处,因此无法解析相对路径。

作为后备,它可能解析了相对于当前目录的相对路径,但是由于文件不存在,因此找不到它们。

将XSD指定为URI。

<div class="container">
  <div class="item1">A</div>
  <div class="item2">B</div>
  <div class="item3">C</div>
  <div class="item4">D</div>
  <div class="item5">E</div>
  <div class="item6">F</div>
  <div class="item7">G</div>
  <div class="item8">H</div>
</div>

优势:您不必记住关闭似乎忘记了的流。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。