java xsd验证xml_如何在Java中针对XSD验证XML?

该javax.xml.validation软件包提供了用于XML文档验证的API。验证过程将验证XML文档是指定的XML模式文件或XSD文件的实例。在此示例中,我们将验证records.xml下面的文件是否在records.xsd架构实例中。首先,我们将创建以下XML文件和应遵循的XSD文件。

XML文件:<?xml  version="1.0" encoding="UTF-8"?>

Brand New Eyes

Paramore

Punk Rock

2011

Various Artist

Rock

XSD文件:<?xml  version="1.0" encoding="UTF-8"?>

elementFormDefault="qualified">

下面的代码段将在以下步骤中处理验证过程。在main()方法中,我们创建XMLValidator实例并调用该validate()方法,并传递XML文件和XSD文件。我们的validate()方法首先创建的实例SchemaFactory。该SchemaFactory.newInstance()方法返回的实例SchemaFactory。在此示例中,我们将创建一个W3C XML模式。

下一步是Schema通过调用schemaFactory.newSchema()并创建一个对象,然后传递模式/ XSD文件。该Schema对象将允许我们javax.xml.validation.Validator通过调用schema.newValidator()方法来创建的实例。最后,为了验证XML是否有效,我们调用validator.validate()方法并传递要验证的XML文件。如果XML无效,则此validate方法将引发异常。

Java代码:package org.nhooo.example.xml;

import org.xml.sax.SAXException;

import javax.xml.XMLConstants;

import javax.xml.transform.stream.StreamSource;

import javax.xml.validation.Schema;

import javax.xml.validation.SchemaFactory;

import javax.xml.validation.Validator;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.net.URL;

import java.util.Objects;

public class XMLValidator {

public static final String XML_FILE = "records.xml";

public static final String SCHEMA_FILE = "records.xsd";

public static void main(String[] args) {

XMLValidator XMLValidator = new XMLValidator();

boolean valid = XMLValidator.validate(XML_FILE, SCHEMA_FILE);

System.out.printf("%s validation = %b.", XML_FILE, valid);

}

private boolean validate(String xmlFile, String schemaFile) {

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

try {

Schema schema = schemaFactory.newSchema(new File(getResource(schemaFile)));

Validator validator = schema.newValidator();

validator.validate(new StreamSource(new File(getResource(xmlFile))));

return true;

} catch (SAXException | IOException e) {

e.printStackTrace();

return false;

}

}

private String getResource(String filename) throws FileNotFoundException {

URL resource = getClass().getClassLoader().getResource(filename);

Objects.requireNonNull(resource);

return resource.getFile();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值