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

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

java validator类怎么用 java程序验证xml

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()

暗壳AI

暗壳AI

Ark.art 包罗万象的艺术方舟,友好高效的设计助手

下载

立即学习Java免费学习笔记(深入)”;

  • 验证文件: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());
}

https://www.php.cn/faq/1968835.html

发表回复

Your email address will not be published. Required fields are marked *