XML 是可扩展标记语言,也就是说其中的标记我们可以按照我们的意愿生成,只要符合语法规则就认为是合法的。
但是很多情况下我们需要根据一定的验证规则对xml 文档实施限制。当我们书写一个xml 文档的时候,通过验证文档对其进行验证,可以保证所书写的文档是合法合理的。这样我们的程序才可以对其进行适当的操作。不然随意写一个符合语法的xml 文档,我们的程序显然不能总是能对其进行操作。
验证文档对所书写的xml 文档进行合理合法的验证,验证文档有两种格式,一种为dtd ,一种为xsd (schema 形式)。
Xsd 文档主要起一个验证作用!
我们可以在操作一个传输过来的,或者新生成的xml 文档先进行验证,然后再进行解析,这样可以保证操作成功。
在此,我们使用schema 格式的文档对xml 进行验证。
<? xml version = "1.0" encoding = "UTF-8" ?>
<!--W3C Schema generated by XMLSpy v2008 (http://www.altova.com)-->
< xs:schema xmlns = "http://www.frank.com"
xmlns:xs = "http://www.w3.org/2001/XMLSchema" targetNamespace = "http://www.frank.com" elementFormDefault = "qualified" >
< xs:element name = "students" >
< xs:complexType >
< xs:sequence >
< xs:element ref = "student" maxOccurs = "unbounded" />
</ xs:sequence >
</ xs:complexType >
</ xs:element >
< xs:element name = "student" >
< xs:complexType >
< xs:sequence >
< xs:element ref = "name" />
< xs:element ref = "age" />
</ xs:sequence >
</ xs:complexType >
</ xs:element >
< xs:element name = "name" type = "xs:string" />
< xs:element name = "age" type = "xs:byte" />
</ xs:schema >
<? xml version = "1.0" encoding = "UTF-8" ?>
< my:students xmlns:my = "http://www.frank.com" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" >
< my:student >
< my:name > tom </ my:name >
< my:age > 23 </ my:age >
</ my:student >
< my:student >
< my:name > mike </ my:name >
< my:age > 23 </ my:age >
</ my:student >
</ my:students >
package test;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.xml.transform.Source;
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 TestXML {
/**
* @param args
*/
public static void main(String[] args) throws SAXException, IOException {
// 建立 schema 工厂
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
// 建立验证文档文件对象,利用此文件对象所封装的文件进行 schema 验证
File schemaFile = new File("C:/Documents and Settings/pengch/workspace/xmlschema/test/students.xsd");
// 利用 schema 工厂,接收验证文档文件对象生成 Schema 对象
Schema schema = schemaFactory.newSchema(schemaFile);
// 通过 Schema 产生针对于此 Schema 的验证器,利用 students.xsd 进行验证
Validator validator = schema.newValidator();
// 得到验证的数据源,就是 students.xml
Source source = new StreamSource("C:/Documents and Settings/pengch/workspace/xmlschema/test/students.xml");
// 开始验证,成功输出 success!!! ,失败输出 fail
try {
validator.validate(source);
System.out.println("success!!!");
} catch (Exception ex) {
System.out.println("fail");
}
}
}
抽象一下:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class DefaultErrorHandler implements ErrorHandler {
protected static Log logger = LogFactory.getLog(DefaultErrorHandler.class);
public void error(SAXParseException exception) throws SAXException {
if(logger.isErrorEnabled()) {
logger.error("XML file is invalid", exception);
}
throw new SAXException(exception);
}
public void fatalError(SAXParseException exception) throws SAXException {
if(logger.isErrorEnabled()) {
logger.error("XML file is invalid", exception);
}
throw new SAXException(exception);
}
public void warning(SAXParseException exception) throws SAXException {
if(logger.isWarnEnabled()) {
logger.warn("Warning", exception);
}
exception.printStackTrace();
}
}
import java.io.IOException;
import java.io.InputStream;
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.ErrorHandler;
import org.xml.sax.SAXException;
public class DefaultSchemaValidator extends SchemaValidator {
private InputStream schemaStream;
/**
* 构造函数
* @param schemaStream schema 文件输入流
*/
public DefaultSchemaValidator(InputStream schemaStream) {
this.schemaStream = schemaStream;
}
/**
* 构造函数
* @param clz
* @param schemaFile schema 文件
*/
public DefaultSchemaValidator(Class clz, String schemaFile) {
this.schemaStream = clz.getResourceAsStream(schemaFile);
}
public DefaultSchemaValidator(ClassLoader classLoader, String schemaFile) {
this.schemaStream = classLoader.getResourceAsStream(schemaFile);
}
public void validate(InputStream xmlStream, ErrorHandler errorHandler) throws SAXException, IOException {
Schema schema = createSchema(schemaStream);
Validator validator = schema.newValidator();
validator.setErrorHandler(errorHandler);
validator.validate(new StreamSource(xmlStream));
}
/**
* 验证给定的 xml 是否合法
*
* @return
* @throws SAXException
*/
protected Schema createSchema(InputStream schemaStream) throws SAXException {
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
return schemaFactory.newSchema(new StreamSource(schemaStream));
}
}
import java.io.IOException;
import java.io.InputStream;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
public abstract class SchemaValidator {
public abstract void validate(InputStream xmlStream, ErrorHandler errorHandler) throws SAXException, IOException;
public void validate(InputStream xmlStream) throws SAXException, IOException {
validate(xmlStream, new DefaultErrorHandler());
}
}
import java.io.IOException;
import org.xml.sax.SAXException;
import com.DefaultSchemaValidator;
import com.SchemaValidator;
public class TestXML2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SchemaValidator schemaValidator= new DefaultSchemaValidator(TestXML2.class,"Students.xsd");
try {
schemaValidator.validate(TestXML2.class.getResourceAsStream("students.xml"));
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
fon
发表评论
-
深入分析 Java 中的中文编码问题
2011-11-16 07:45 0几种常见的编码格式 ... -
Java 编码
2011-11-16 07:44 0http://zhidao.baidu.com/quest ... -
java字符编码原理解析
2011-11-16 07:43 0可以理解为计算机没 ... -
HttpClient
2011-11-03 11:07 824From http://www.blogjava.net/Al ... -
ECLIPSE ANT OutOfMemoryError
2011-08-04 17:23 1011ANT BUILD MEMORY ERROR: [cl ... -
JDBC BATCH
2011-07-05 14:58 0PreparedStatement ps = conn.pre ... -
OUT OF MEMORY WHEN BUILD
2011-02-22 17:47 01, ANT BUILD: In Eclipse op ... -
spring weblogic jndi
2011-02-16 09:18 1837weblogic:weblogic8.1 数据库:MySql ... -
log4j 邮件
2011-01-24 15:54 0<!-- 设置上下文参数 --> ... -
tomcat weblogic
2010-12-01 11:25 1862EJB 层基本搞定,以前测试 EJB 也都是写一个 appli ... -
ant weblogic “local class incompatible: stream classdesc serialVersionUI”
2010-11-29 12:41 2225weblogic.management.Management ... -
Debugging with the Maven Jetty Plugin in Eclipse
2010-11-15 17:42 1035debug: http://docs.codehaus.or ... -
maven tomcat eclipse debug
2010-11-15 17:36 1946from: http://bandaidprogrammin ... -
maven app tomcat 部署
2010-11-11 15:56 1307修改pom.xml,添加如下配置: <build ... -
Maven Cargo Tomcat 部署
2010-11-11 15:49 1769pom.xml中<build>下添加如下代码: ... -
java中读取配置文件各种方法
2010-09-07 12:31 01。使用Java.util.Properties类的load( ... -
ThreadGroup
2010-05-25 08:47 0在Java中每个线程都属于某个线程组(ThreadGroup) ... -
java Excel 导出
2010-03-28 20:06 0public void createExcel(OutputS ... -
java小数保留两位小数
2009-11-19 16:49 2337方式一: 四舍五入 double f = ... -
java读写xml文件的方法
2009-10-30 08:58 1795在java环境下读取xml文件的方法主要有4种:DOM、SAX ...
相关推荐
在Java中实现XML Schema验证文件,主要是为了确保XML文档遵循预定义的结构和规则,从而保证数据的正确性和一致性。XML Schema(XSD)是一种用于定义XML文档结构和数据类型的规范,它提供了比DTD(Document Type ...
总的来说,Java中的XML Schema验证是一个关键的过程,它确保了XML数据的准确性和一致性,从而降低了程序处理数据时出错的风险。通过正确地构建和使用XSD,开发者可以构建更加健壮、可靠的XML处理系统。
然而,Java中处理XML及其实现XSD校验的过程并不直观,尤其是当涉及到Sun提供的XML相关软件包时。这是因为W3C为XML定义了大量的规范,这使得学习和理解相关的API变得异常困难。此外,随着新规范的不断推出,掌握所有...
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> </xs:schema> ``` 这个例子定义了一个`person`元素,包含`firstName`和`lastName`两个子元素,都是字符串类型。 2. **验证XML文档**:...
在Java中,XML Schema的验证可以使用javax.xml.validation包,提供了独立于模式语言的验证服务接口。该包提供了三个类来验证文档:SchemaFactory、Schema和Validator。 在实际应用中,XML Schema可以用于: 1. ...
- **在应用程序中使用 XML Schema**:XML Schema 可以用于验证 XML 数据的有效性,确保其符合预期的结构和格式要求。 #### 四、XML Schema 标准 - **XML Schema 是 W3C 标准**:XML Schema 在 2001 年成为了万维网...
`xmlschema-core-2.0.3.jar` 提供了处理这些XSD文件的API,使得Spring能够验证发送到服务的请求和从服务返回的响应是否符合预定义的XSD规范。 这个库提供了以下主要功能: 1. **解析和编译XSD文档**:它可以解析...
XmlSchema库则为Java开发者提供了处理这些XML Schema文档的API,使得在Java应用程序中解析、验证和生成符合XML Schema的XML文档变得容易。 在开发过程中,使用XmlSchema-1.4.7.jar可以帮助开发者实现以下功能: 1. ...
`XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP(简单对象访问协议)的Web服务交互时,这个库扮演了至关重要的角色。...
通过这些库,你可以加载XML Schema文件,验证XML文档是否符合Schema定义,也可以根据Schema生成XML文档。 标签"SOA"提示我们,这个实验可能与Service-Oriented Architecture(面向服务架构)有关。在SOA中,XML和...
在Java中,XML文件的合法性验证是通过DOM(Document Object Model)解析器来实现的。DOM解析器将XML文档加载到内存中,并构建一个树形结构,使得开发者可以通过API访问和操作XML文档的各个部分。当涉及到XML文件的...
这可以通过编程语言中的XML解析库或XML工具实现,例如Java的JAXB,.NET框架的XmlSchema类等。 10. **学习资源**:"XMLSchema.chm"这样的帮助文档通常会详细解释XML Schema的语法、用法和示例,对于初学者来说是非常...
这些文档能够帮助开发者了解如何在Java程序中导入和使用XML Schema API,从而实现XML文档的解析和验证。 以下是XML Schema API中的几个关键组件和概念: 1. **XMLSchemaFactory**:这是创建XML Schema对象的工厂类...
"xmlschema-1.4.5.jar.zip"是一个包含XML Schema相关实现的Java类库,主要用于处理和验证XML文档是否符合特定的XSD规范。 在Java环境中,`xmlschema-1.4.5.jar`是一个关键组件,它提供了一系列API供开发者使用,...
在实际应用中,XSD不仅可以帮助我们验证XML文档,还可以用于生成Java类、WSDL服务定义等,极大地提升了XML在各种应用场景下的可操作性。对于开发人员来说,理解和掌握XSD是提高工作效率和代码质量的重要技能。 通过...
在进行XML Schema验证时,首先需要创建一个SchemaGrammar对象来加载XSD文件,然后使用SchemaValidator设置这个模式,并将XML文档解析器关联到验证器。解析XML文件时,验证器会根据XSD规则检查每个元素和属性,若有...
* 文档验证:XML Schema可以用于验证XML文档的正确性,确保文档符合预定义的结构和内容。 * 数据存储:XML Schema可以用于定义数据存储的格式和结构,确保数据的正确性和一致性。 XML Schema的优点: * 提高数据...
4. 包含和导入:一个XML Schema可以包含或导入另一个XML Schema,实现模式的模块化。 XML Schema 提供了强大的验证功能,确保XML文档符合业务需求和数据规范。在处理XML数据时,使用XML Schema可以显著提高数据处理...
Java还提供了处理XML Schema(XSD)的能力,可以验证XML文档是否符合特定的模式。`javax.xml.validation`包包含了所需的工具,如`SchemaFactory`和`Validator`。 在实际应用中,选择合适的解析器取决于XML文件的...
5. **源码解析**:可能包含XML Schema在实际项目中的应用,比如在Java或.NET中的使用,以及如何将XML Schema与代码库集成。 压缩包中的“XML Schema学习总结.pdf”很可能是一个详细的教程,包含了XML Schema的各个...