Java Validator类怎么用 Java程序验证XML

Java中XML验证需通过JAXP的Validator配合XSD Schema实现:先用SchemaFactory加载book.xsd,再创建Validator实例,最后用validate()校验book.xml等Source,异常时抛SAXException。

Java 中验证 XML 通常不通过 Validator 类直接完成,而是借助 JAXP(Java API for XML Processing) 中的 javax.xml.validation.Validator 配合 Schema 实现——它本身不解析或校验任意 XML 文本,而是对已构建的 Source(如 SAXSourceDOMSourceStreamSource)执行基于 Schema 的验证。

准备一个有效的 Schema(XSD)文件

Validator 必须依赖 XSD(或 DTD,但 JAXP 5+ 默认推荐 XSD)来定义合法结构。例如,保存为 book.xsd


  
    
      
        
        
        
      
    
  

加载 Schema 并创建 Validator 实例

使用 SchemaFactory 解析 XSD,再获取 Validator

  • 指定命名空间:SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema")
  • newStreamSource(new File("book.xsd")) 加载 XSD
  • 调用 schema.newValidator() 得到可复用的 Validator 对象

对 XML 文件或字符串执行验证

将待校验的 XML 封装为 Source,传给 validator.validate()

  • 验证文件:new StreamSource(new File("book.xml"))
  • 验证字符串:new StreamSource(new StringReader(xmlString))
  • 可选:设置自定义 ErrorHandler 捕获警告/错误(否则异常会中断执行)

若 XML 不符合 XSD,会抛出 SAXException(如元素缺失、类型错误),需 try-catch 处理。

完整示例代码(含错误处理)

以下是一个最小可用验证流程:

try {
  SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
  Schema schema = factory.newSchema(new File("book.xsd"));
  Validator validator = schema.newValidator();

  // 自定义错误处理器(可选)
  validator.setErrorHandler(new ErrorHandler() {
    public void error(SAXParseException e) { System.err.println("Error: " + e.getMessage()); }
    public void fatalError(SAXParseException e) { System.err.println("Fatal: " + e.getMessage()); }
    public void warning(SAXParseException e) { System.err.println("Warning: " + e.getMessage()); }
  });

  validator.validate(new StreamSource(new File("book.xml"))); // 成功则静默,失败抛异常
  System.out.println("XML 验证通过");
} catch (SAXException | IOException e) {
  System.err.println("验证失败: " + e.getMessage());
}