如何在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"?>

<root>

    <records>

        <record>

            <title>Brand New Eyes</title>

            <artist>Paramore</artist>

            <genre>Punk Rock</genre>

            <year>2011</year>

        </record>

        <record>

            <artist>Various Artist</artist>

            <genre>Rock</genre>

            <year/>

        </record>

    </records>

</root>

XSD文件:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified"

           elementFormDefault="qualified">

    <xs:element name="root" type="rootType">

    </xs:element>

    <xs:complexType name="rootType">

        <xs:sequence>

            <xs:element name="records" type="recordsType"/>

        </xs:sequence>

    </xs:complexType>

    <xs:complexType name="recordsType">

        <xs:sequence>

            <xs:element name="record" type="recordType" maxOccurs="unbounded" minOccurs="0"/>

        </xs:sequence>

    </xs:complexType>

    <xs:complexType name="recordType">

        <xs:sequence>

            <xs:element type="xs:string" name="title"/>

            <xs:element type="xs:string" name="artist"/>

            <xs:element type="xs:string" name="genre"/>

            <xs:element type="xs:short" name="year"/>

        </xs:sequence>

    </xs:complexType>

</xs:schema>

下面的代码段将在以下步骤中处理验证过程。在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();

    }

}

                       

以上是 如何在Java中针对XSD验证XML? 的全部内容, 来源链接: utcz.com/z/350110.html

回到顶部