java xml格式验证_Java中对XML文件的校验
Java中使用dtd校验xml文件:
1.定义一个校验类CheckXML类:
import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
public class CheckXML(){
public Doucment getCheckXML(){
List result = new ArrayList<>();
// 使用Java的类加载器,查找类路径下的资源文件。
// 1.获取任意的Class类型的对象,类名.class就可以返回一个Class对象。
Class> clazz = Teststudent.class;
// 2.调用getResourceAsStream(arg0)得到输入流。
// 从类路径的根目录查找名为book.xml的文件。
// 自动在所有的类路径下面查找名为student.xml的文件,找到第一个就马上返回,不会继续找。
URL url = clazz.getResource("./student.xml");
//下面是输出student.xml文件的根目录
System.out.println(url);
InputStream in = url.openStream();
// 1.创建DocumentBuilderFactory
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
// 开启验证!
builderFactory.setValidating(true);
// 2.利用DocumentBuilderFactory创建DocumentBuilder
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// 3.使用EntityResolver告诉XML解析器DTD文件在哪里!
// 同样在当前类的类路径下面,查找student.dtd文件
builder.setEntityResolver(new EntityResolver(){
@Override
public InputSource resolveEntity(String arg0, String arg1) throws SAXException, IOException {
InputStream dtdStream = clazz.getResourceAsStream("./student.dtd");
InputSource source = new InputSource(dtdStream);
return source;
}
});
// 4.为了能够得到准确的解析验证信息,必须提供一个ErrorHandler
MyErrorHandler eh = new MyErrorHandler();
builder.setErrorHandler(eh);
if(eh.isSucceed()){
System.out.println("解析成功!");
// 5.执行解析
// 底层使用SAX方式读取XML内容,这样读取的性能比较好
Document doc = builder.parse(in);
return doc;
}else{
System.out.println("解析失败!");
return null;
}
}
static class MyErrorHandler implements ErrorHandler {
private Integer Errorcount = 0;
@Override
public void error(SAXParseException arg0) throws SAXException {
System.out.println("出现错误!");
arg0.printStackTrace(System.out);
Errorcount++; }
@Override
public void fatalError(SAXParseException arg0) throws SAXException {
System.out.println("出现致命的错误!");
arg0.printStackTrace(System.out);
Errorcount++; }
@Override
public void warning(SAXParseException arg0) throws SAXException {
System.out.println("出现警告!");
arg0.printStackTrace(System.out); }
//判断是否解析成功!
public boolean isSucceed(){ if(Errorcount == 0){ return true; } return false; } }
}
1.2dom4j使用dtd校验xml:
// 1.创建SAXReader SAXReader reader = new SAXReader();
// 2.打开验证 reader.setValidation(true);
// 3.设置EntityResolver,在DOM4j里面,默认能够找到相同目录下的dtd文件 /
/ 提供setEntityResolver的原因,主要是解决:如果XML里面声明的dtd文件和实际的dtd文件的名字不同的时候,能够正确找到dtd
reader.setEntityResolver(new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
URL dtdURL = cla.getResource("./students.dtd");
InputStream dtdStream = dtdURL.openStream();
InputSource source = new InputSource(dtdStream);
return source; } });
// 4.读取XML,生成Document对象
Document document = reader.read(url);
==============================================
Java使用schame校验xml文件:
2.1创建一个ValidationXM类:
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
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 org.xml.sax.SAXException;
public class ValidationXML {
public static void getValidationXML() throws SAXException, IOException {
URL url = ValidationXML.class.getResource("book.xsd");
// 读取Schema文件
Schema s = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(url);
// 创建验证器
Validator v = s.newValidator();
// 对输入流进行验证
InputStream in = ValidationXML.class.getResourceAsStream("/book.xml");
StreamSource source = new StreamSource(in);
v.validate(source);
// 验证没有报错再去读取
//........................parse();
} }
3.使用dom4j:需要导两个包:dom4j.jar,jaxen-1.1-beta-6.jar。
import java.io.IOException;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class ValidatingDom4j {
public static void main(String[] args) throws DocumentException,
SAXException {
SAXReader reader = new SAXReader();
// 打开验证
reader.setValidation(true);
//验证指定的输入。
reader.setFeature("http://apache.org/xml/features/validation/schema", true);
// 找到xsd文件的位置 reader.setEntityResolver(new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
InputStream in = ValidatingDom4j.class .getResourceAsStream("book.xsd");
InputSource source = new InputSource(in);
return source; }
});
InputStream in = ValidatingDom4j.class.getResourceAsStream("book.xml");
Document doc = reader.read(in); } }
原文:http://www.cnblogs.com/ljhai/p/4793386.html
java xml格式验证_Java中对XML文件的校验相关推荐
- java读取xml路径问题_java 中读取xml 和绝对路径
一.得到绝对路径 本人用到的不多,就列举常用的. 以上2种可读取固定配置文件可用得到绝对路径 1.System.getProperty("user.dir"); 这个东西局限性十分 ...
- java xml 实体类_java中的xml与实体类之间的映射
实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...
- java手机号码格式验证_java 校验手机号格式
主要用到这两个包: import java.util.regex.Matcher; import java.util.regex.Pattern; Pattern类用于创建一个正则表达式,生成一个Pa ...
- java时间格式转换_Java中System.currentTimeMillis()计算方式与时间的单位转换
学会与时间赛跑才能赢得时间的尊重,把握好每一天,趁年轻! java中获取系统当前时间相信大家都会,这是经常用到的也是非常简单的,但还是要经常回顾下一些小细节哦! 一.时间的单位转换 1秒=1000毫秒 ...
- java密码安全验证_java安全编码指南之:输入校验
简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验. 本文将带领大家探讨一下用户输入校验的一些场景.一起来看看吧. 在字符 ...
- java excel 中文乱码_java中读取excel文件中字符串乱码问题解决方法
以前的时候发现直接java读取一个excel文件输出里面的字符串会乱码,中文字符不会乱码,但是遇到英文的时候输出会乱码.这个问题太奇怪了. 我的表格名字为Shirley.xls. 我曾经直接读取exc ...
- java 字节的复制_JAVA中字节流复制文件
package com.dragon.demo.file; import java.io.FileInputStream; import java.io.FileOutputStream; publi ...
- java object取数据_java使用ObjectInputStream从文件中读取对象
import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; i ...
- android的xml解析方式,Android中对xml文件解析的3种方式总结
前言 xml 是数据传输的一种格式,Android 中的布局文件.设置文件等都采用它来表示.Android 中对 xml 文件的解析也有多种方式,下面介绍常用的 3 种方式: Dom . SAX 和 ...
最新文章
- SAP-注入“AI基因” 打造全球第一款“智能ERP
- Linux反空闲设置的两种方法
- (Integer) 128 == (Integer) 128 为false详细解读
- swift:创建表格UITableView
- 用jQuery监听浏览器窗口的变化
- leetcode 112路径总和
- 【月入百万】,资深股民恐怕都不知道
- 渐变色彩艺术海报背景素材|感官刺激、个性突出
- Jquery学习总结(5)——jQuery选择器
- 昆明北大附中2021高考成绩查询入口,昆明高考成绩单:昆明多所高中高考数据来啦!...
- ubuntu内核版本管理
- IE浏览器经典故障分析与实战解决方案
- Java 并发 —— 读写锁(ReadWriteLock)
- android背景图边框渐变,GitHub - jvyun/TestShape: 使用自定义属性替代项目中的shape文件,可以给View设置背景色、弧度、背景渐变、边框、边框颜色、渐变方向等...
- 极光im php,利用php+curl调用极光IM第三方REST API方法经验
- 3D数据基础——向量介绍与3D向量类的实现
- 解决浏览器看不到Flash文档(尤其某慕课)
- 雷迪9000使用说明_雷迪司UPS监控软件使用说明
- J-LinK-OB改造版 仿真/调试器 使用说明
- 省钱!程序员福利!!全国多地一分钱乘公交优惠活动来了!持续到5月底