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文件的校验相关推荐

  1. java读取xml路径问题_java 中读取xml 和绝对路径

    一.得到绝对路径 本人用到的不多,就列举常用的. 以上2种可读取固定配置文件可用得到绝对路径 1.System.getProperty("user.dir"); 这个东西局限性十分 ...

  2. java xml 实体类_java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  3. java手机号码格式验证_java 校验手机号格式

    主要用到这两个包: import java.util.regex.Matcher; import java.util.regex.Pattern; Pattern类用于创建一个正则表达式,生成一个Pa ...

  4. java时间格式转换_Java中System.currentTimeMillis()计算方式与时间的单位转换

    学会与时间赛跑才能赢得时间的尊重,把握好每一天,趁年轻! java中获取系统当前时间相信大家都会,这是经常用到的也是非常简单的,但还是要经常回顾下一些小细节哦! 一.时间的单位转换 1秒=1000毫秒 ...

  5. java密码安全验证_java安全编码指南之:输入校验

    简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验. 本文将带领大家探讨一下用户输入校验的一些场景.一起来看看吧. 在字符 ...

  6. java excel 中文乱码_java中读取excel文件中字符串乱码问题解决方法

    以前的时候发现直接java读取一个excel文件输出里面的字符串会乱码,中文字符不会乱码,但是遇到英文的时候输出会乱码.这个问题太奇怪了. 我的表格名字为Shirley.xls. 我曾经直接读取exc ...

  7. java 字节的复制_JAVA中字节流复制文件

    package com.dragon.demo.file; import java.io.FileInputStream; import java.io.FileOutputStream; publi ...

  8. java object取数据_java使用ObjectInputStream从文件中读取对象

    import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; i ...

  9. android的xml解析方式,Android中对xml文件解析的3种方式总结

    前言 xml 是数据传输的一种格式,Android 中的布局文件.设置文件等都采用它来表示.Android 中对 xml 文件的解析也有多种方式,下面介绍常用的 3 种方式: Dom . SAX 和 ...

最新文章

  1. SAP-注入“AI基因” 打造全球第一款“智能ERP
  2. Linux反空闲设置的两种方法
  3. (Integer) 128 == (Integer) 128 为false详细解读
  4. swift:创建表格UITableView
  5. 用jQuery监听浏览器窗口的变化
  6. leetcode 112路径总和
  7. 【月入百万】,资深股民恐怕都不知道
  8. 渐变色彩艺术海报背景素材|感官刺激、个性突出
  9. Jquery学习总结(5)——jQuery选择器
  10. 昆明北大附中2021高考成绩查询入口,昆明高考成绩单:昆明多所高中高考数据来啦!...
  11. ubuntu内核版本管理
  12. IE浏览器经典故障分析与实战解决方案
  13. Java 并发 —— 读写锁(ReadWriteLock)
  14. android背景图边框渐变,GitHub - jvyun/TestShape: 使用自定义属性替代项目中的shape文件,可以给View设置背景色、弧度、背景渐变、边框、边框颜色、渐变方向等...
  15. 极光im php,利用php+curl调用极光IM第三方REST API方法经验
  16. 3D数据基础——向量介绍与3D向量类的实现
  17. 解决浏览器看不到Flash文档(尤其某慕课)
  18. 雷迪9000使用说明_雷迪司UPS监控软件使用说明
  19. J-LinK-OB改造版 仿真/调试器 使用说明
  20. 省钱!程序员福利!!全国多地一分钱乘公交优惠活动来了!持续到5月底

热门文章

  1. 令人惊艳的文章开头,建议【收藏】
  2. 操作系统 进程调度之轮换调度(RR调度)
  3. Robomaster:大风车识别可视化(记录一下)
  4. 【R语言编程基础】【课后习题答案】【全】
  5. Vue字符串查重 、数组查重、不重复的文字高亮显示
  6. 2.整理华子面经--2
  7. 学习大数据开发培训前景如何
  8. 英语听说读写 复读机软件LangStream
  9. eval函数 c语言,matlab中eval函数的用法
  10. DW 简单效果代码整理