使用SAXParser验证XML文件格式---XSD

package com.xsd;

import java.io.IOException;

import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

class XMLReaderValidator {
public static void main(String[] args) {
String parserClass = "org.apache.xerces.parsers.SAXParser";
String validationFeature = "http://xml.org/sax/features/validation";
String schemaFeature = "http://apache.org/xml/features/validation/schema";
String fileName = "conf/xsd/dictionary_invalid_xsd.xml";
try {
String x = fileName;
XMLReader r = XMLReaderFactory.createXMLReader(parserClass);
r.setFeature(validationFeature, true);
r.setFeature(schemaFeature, true);
r.setErrorHandler(new MyErrorHandler());
r.parse(x);
} catch (SAXException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
}
}

private static class MyErrorHandler extends DefaultHandler {
public void warning(SAXParseException e) throws SAXException {
System.out.println("Warning: ");
printInfo(e);
}

public void error(SAXParseException e) throws SAXException {
System.out.println("Error: ");
printInfo(e);
}

public void fatalError(SAXParseException e) throws SAXException {
System.out.println("Fattal error: ");
printInfo(e);
}

private void printInfo(SAXParseException e) {
System.out.println(" Public ID: " + e.getPublicId());
System.out.println(" System ID: " + e.getSystemId());
System.out.println(" Line number: " + e.getLineNumber());
System.out.println(" Column number: " + e.getColumnNumber());
System.out.println(" Message: " + e.getMessage());
}
}
}

xml文件和xsd文件稍后上传
Java 可以使用 Java API for XML Processing (JAXP) 中的 Validation API 对 XML 文件进行格式验证。具体实现步骤如下: 1. 创建一个 SAXParserFactory 实例,用于创建 SAXParser。 2. 设置 SAXParserFactory 的属性,使其支持 XML Schema 验证。 3. 创建一个 SAXParser 实例。 4. 实现一个 DefaultHandler,用于处理 SAX 事件。 5. 调用 SAXParser.parse() 方法,将 XML 文件解析为 SAX 事件流,并将 DefaultHandler 作为解析器的回调函数。 6. 如果 XML 文件格式不符合指定的 XML Schema,则会抛出 SAXException 异常。 下面是一个简单的示例代码,用于验证一个 XML 文件是否符合指定的 XML Schema: ```java import javax.xml.XMLConstants; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class XmlValidator extends DefaultHandler { private boolean isValid = true; public boolean validate(String xmlFilePath, String xsdFilePath) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(true); SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = schemaFactory.newSchema(new File(xsdFilePath)); factory.setSchema(schema); SAXParser parser = factory.newSAXParser(); parser.parse(new File(xmlFilePath), this); } catch (Exception e) { isValid = false; } return isValid; } @Override public void error(SAXParseException e) throws SAXException { isValid = false; } @Override public void fatalError(SAXParseException e) throws SAXException { isValid = false; } } ``` 在上述代码中,validate() 方法接受两个参数,分别是要验证XML 文件路径和 XML Schema 文件路径。如果 XML 文件符合指定的 XML Schema,将返回 true,否则返回 false。如果 XML 文件格式不符合指定的 XML Schema,将抛出 SAXException 异常,isValid 属性将被设置为 false。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值