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(如 SAXSource、DOMSource 或 StreamSource)执行基于 Schema 的验证。
准备一个有效的 Schema(XSD)文件
Validator 必须依赖 XSD(或 DTD,但 JAXP 5+ 默认推荐 XSD)来定义合法结构。例如,保存为 book.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
<xs:element name="year" type="xs:positiveInteger"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
加载 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():
立即学习“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());
}










