Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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中检查XSD是否有效_Java_Xsd - Fatal编程技术网

如何在Java中检查XSD是否有效

如何在Java中检查XSD是否有效,java,xsd,Java,Xsd,如何检查给定文件是否为Java 7中的有效XSD文件(没有internet连接) 这不是重复的。我不想对照XSD检查XML,而是检查XSD本身是否有效 到目前为止,我所尝试的: @Slf4j public class Program { /** * Sample main method. * * @param args * program arguments */ public static void main(String[] arg

如何检查给定文件是否为Java 7中的有效XSD文件(没有internet连接)

这不是重复的。我不想对照XSD检查XML,而是检查XSD本身是否有效

到目前为止,我所尝试的:

@Slf4j
public class Program {

  /**
   * Sample main method.
   * 
   * @param args
   *          program arguments
   */
  public static void main(String[] args) {
    try {
      log.info("Program has started.");
      DocumentBuilder parser = DocumentBuilderFactory.newInstance()
          .newDocumentBuilder();
      Document document = parser.parse(new File("test.xsd"));
      SchemaFactory factory = SchemaFactory
          .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
      Schema schema = factory.newSchema(new URL(
          "http://www.w3.org/2001/XMLSchema"));
...

      log.info("Program has finished - ok.");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}
问题是:

  • 即使test.xsd有效,也会引发一些奇怪的异常
  • 正在从internet获取验证模式,但我必须在没有 互联网连接
  • 例外情况是:

    org.xml.sax.SAXParseException; systemId: http://www.w3.org/2001/XMLSchema; lineNumber: 7; columnNumber: 20; s4s-elt-character: Non-whitespace characters are not allowed in schema elements other than 'xs:appinfo' and 'xs:documentation'. Saw 'XML Schema'.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.characters(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source)
    at javax.xml.validation.SchemaFactory.newSchema(Unknown Source)
    at javax.xml.validation.SchemaFactory.newSchema(Unknown Source)
    at o2.xml.core.Program.main(Program.java:39)
    
    问题可能是在指定模式时,所以我应该指定什么来检查XSD?是否有其他预构建常量或什么?

    这一个(基于)对我来说似乎没问题:

    URL schemaFile = new URL("https://www.w3.org/2001/XMLSchema.xsd");
    Source xmlFile = new StreamSource(XMLSchemaTest.class.
    getResourceAsStream("mySchema.xsd"));
    SchemaFactory schemaFactory =   
         SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    try {
         Schema schema = schemaFactory.newSchema(schemaFile);
         Validator validator = schema.newValidator();
         validator.validate(xmlFile);
         System.out.println("is valid");
    } catch (SAXException e) {
         System.out.println(xmlFile.getSystemId() + " is NOT valid reason:" + e);
    } catch (IOException e) {
         e.printStackTrace();
    }
    

    我也尝试过使用,但这一次在主模式读取过程中产生错误

    可能重复否,我不想根据XSD检查XML,但要检查XSD的有效性。@TobySpeight ok,updated@TobySpeight增加了例外情况,更详细地说明了问题可能是什么是XMLSchemaTest?编辑:我认为这是该代码所在的类的名称。