使用dom4j进行校验时是将整个文件读入内存,处理大文件内存溢出。
使用xsd schema,通过stax读取xml大文件解决问题。
import java.io.*;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import javax.xml.XMLConstants;
import org.xml.sax.SAXParseException;
public class XMLValidator {
public static void validate(String sourceFilePath, String schemaFilePath) throws Exception {
// 1. Lookup a factory for the W3C XML Schema language
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// 2. Compile the schema.
// Here the schema is loaded from a java.io.File, but you could use
// a java.net.URL or a javax.xml.transform.Source instead.
File schemaLocation = new File(schemaFilePath);
Schema schema = factory.newSchema(schemaLocation);
// 3. Get a validator from the schema.
Validator validator = schema.newValidator();
// 使用javax.stream 读取源文件
Source source = new StreamSource(sourceFilePath);
try {
validator.validate(source);
} catch (SAXParseException ex) {
System.out.println(ex.getMessage());
//可获取文件、行号、具体原因
}
}
}
内部实现采用apache xerces
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator fSchemaValidator;
http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html
之前遇到问题:
在处理镜像大文件时需要按规则分解生成小文件并进行校验,channel+stax有效提高了读取300M以上XML文件并写入的效率。开始在使用dom4j写xml时效率难以忍受,主要原因是在按节点写入时的校验过程影响效率。后来通过file channel+stax方式读取xml,写入文件(不做格式校验,当做txt文件来写)效率非常高,可以满足需求。
分享到:
相关推荐
ava校验XML是件很扯淡的事情,因为Sun的XML相关软件包会令你云里雾里。 W3C这块的XML相关的规范相当的多,这也是导致XML处理器起来费劲的主要原因。要想精通这些规范和相关的API,实在是异想天开(新的规范在不停...
C#源码, 通过Schema验证XML文件格式是否正确
java中实现xmlschema验证文件借鉴.pdf
介绍XML中schema的语法,使用指南等等,使用schema进行内容校验
使用DTD或Schema校验XML。从XML生成DTD或Schema。与其它编辑器相比最大不同之处在 于,Rinzo能够与Java elements结合在一起。你可以打开一个类的定义,自动完成类名,从XML声明创建类。这将非常有用假如你要编辑web....
介绍了xml的schema校验的基本知识
同样,对于JSON文件的定义,也应该有一个JSON Schema以规范JSON文件内容。IETF负责起草相关规范最新版本是2018年3月19日发布的Draft 7。JSON Schema用以标注和验证JSON文档的元数据的文档,可以类比于XML Schema。相...
分享一下在网上找到的关于vc中xml文档校验的文章,自己试验过了,比较好用!
用xml文件存储数据的操作小工具,增删改查记录,校验xml文件。菜鸟拙笔,大虾勿笑
The Schematron is a simple and powerful Structural Schema Language for making assertions about patterns found in XML documents. It relies almost entirely on XPath query patterns for defining rules and...
之前做一个开发项目,要校验xml报文合法性,根据Schema使用javax.xml.validation.Validator倒是能验证XML,但是要求是顺序一致才行,一直没找到合适的排序,就自己写了一个排序代码,根据xsd规范文件给xml排序,有...
格式不正确的XML的命令行避难所(CRUX) 对具有Java运行时的任何平台的XML模式和Schematron...使用范例针对本地XML文件执行XML模式验证: crux.jar file.xml针对本地XML文件执行XML Schema验证和Schematron验证: cru
因此,解析器也分为两种,一种是验证的,即会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。 就我所知,验证的...
支持namespace,但不校验schema 为什么FastXml这么快尽可能少的解码字节:往往xml文档中的很多字节都是ASCII范围,它们可以直接强转成char,而不需要解码,比如:标签名、属性名,大部分时候只需要对属性值和...
但除此之外,一个XML文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的DTD文件或者Schema文件来定义,符合了这些定义要求的XML文件,称作valid。因此,解析器也分为验证和非验证两种。是验证的会跟...
schema约束:xml Schema Definition xsd文件 例如: <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace=...
X3D是一种专为万维网而设计... X3D 基于 XML 格式开发,所以可以直接使用 XML DOM 文档树、XML Schema 校验等技术和相关的 XML 编辑工具。目前 X3D 已经是通过 ISO 认证的国际标准。所传为其通用技术规范的一个。英文。
webservice学习笔记1DTD是为了校验XML 2语法 3 schema
13.5 Schema校验和类型分配 13.6 序列类型和Schema 第14章 静态类型 14.1 什么是静态类型 14.2 typeswitch表达式 14.3 treat表达式 14.4 类型声明 14.5 zero-or-one,one—or-more和exactly—one函数 ...
在二次开发过程中, K/3 系统对不同账套之间的基础资料互相导入和导出提供了一个灵活而又方便的 组件 BaseDataExChange2 来对基础资料数据进行处理。...Schema 校验生成和引入 XML 文档来实现数据进行交换的。