使用XSD验证XML
本文简单介绍如何使用XSD验证自己的xml。项目中我们经常使用xml作为配置或者数据交互的文件格式,在解析XML前最好验证一下或者在生成xml文件后验证一下生成的文件格式是正确,这样可以避免解析时出现一些低级的xml文件不符合预定义格式的错误。
CSDN无法正确显示这些xsd, xml以及java代码,如果需要请参考
http://yqbjtu.blog.163.com/blog/static/529426201672674444341/
第一步显示定义XSD,这个参考网上很多教程,本文给出一个简单实例。
order_v1.xsd
<?xml version="1.0" encoding="UTF-8"?>
- Licensed Text
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://demo.com/OrderXMLSchema_v1"
xmlns:tns="http://demo.com/OrderXMLSchema_v1">
<xsd:element name="shipOrder" type="tns:shipOrder"></xsd:element>
<xsd:complexType name="shipOrder">
<xsd:sequence maxOccurs="1" minOccurs="1">
<xsd:element name="orderperson" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
<xsd:element name="order-description" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
<xsd:element name="items" type="tns:items" maxOccurs="1" minOccurs="1"></xsd:element>
<xsd:element name="item-2" type="tns:item-2" maxOccurs="unbounded" minOccurs="1"></xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="items">
<xsd:sequence maxOccurs="unbounded" minOccurs="1">
<xsd:element name="item" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="index" type="xsd:unsignedLong" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="item-2">
<xsd:sequence maxOccurs="1" minOccurs="1">
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="note" type="xsd:string" minOccurs="0"/>
<xsd:element name="quantity" type="xsd:positiveInteger"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="index" type="xsd:unsignedLong" />
</xsd:complexType>
</xsd:schema>
Xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
- Licensed Description.
<shipOrder xmlns="http://demo.com/OrderXMLSchema_v1"
xmlns:server="http://demo.com/OrderXMLSchema_v1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<orderperson>John Smith</orderperson>
<order-description>This document is used for demo sxN#</order-description>
<items>
<item index="1">
some potatoes
</item>
<item index="2">
some tomatoes
</item>
</items>
<item-2 index="1">
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item-2>
<item-2 index="2">
<title>Hide your heart</title>
<note>this is for testing note, it is not required</note>
<quantity>1</quantity>
<price>9.90</price>
</item-2>
</shipOrder>
最后是我们的java代码
import java.io.File;
import java.io.UnsupportedEncodingException;
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 index="2">
<title>Hide your heart</title>
<note>this is for testing note, it is not required</note>
<quantity>1</quantity>
<price>9.90</price>
</item-2>
其余部分基本类似,比较需要注意的是item类型,它有attribute也有value。
<item index="2"> some tomatoes </item>
它的定义是
<xsd:element name="item" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="index" type="xsd:unsignedLong" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
使用XSD验证XML本文简单介绍如何使用XSD验证自己的xml。项目中我们经常使用xml作为配置或者数据交互的文件格式,在解析XML前最好验证一下或者在生成xml文件后验证一下生成的文件格式是正确,这样可以避免解析时出现一些低级的xml文件不符合预定义格式的错误。CSDN无法正确显示这些xsd, xml以及java代码,如果需要请参考http://yqbjtu.blog.163.com/blog/s
现在的语言,如果不有那么一点OO的影子,都不好意思称之为语言了。在
XML
的语义约束方面,DTD虽然简单,但是功能不够强大,完全是直白的描述,于是又有了替代DTD的
XSD
(
XML
Schema Definition),
XSD
引入了数据类型,提供了自定义数据类型的各种机制,甚至还能找到继承、多态等各种OO特征,然而学习起来也就相对复杂了,从这篇笔记开始学习一下
XSD
。
1、
XSD
文件是...
项目中遇到了需要对
xml
数据进行入库的需求,但是在入库之前需要利用
xsd
文件对
xml
的合法性进行
验证
。
在网上找代码,找到了 leizhimin 的BLOG ,将其整理。感谢博主分享代码。
import
java
.io.File;
import
java
x.
xml
.parsers.SAXParser;
import
java
x.
xml
.parsers.SAXParserFa
方法一:private boolean validate
XML
By
XSD
(String
xml
) throws SAXException, UnsupportedEncodingException
//建立schema工厂
SchemaFactory schemaFactory = SchemaFactory.newInstance("http:/
XML
Schema 语言也称作
XML
Schema 定义(
XML
Schema Definition,
XSD
),作用是定义
XML
文档的合法构建模块,类似 DTD,但更加强大。作用有:
①定义可出现在文档中的元素
②定义可出现在文档中的属性
③定义哪个元素是子元素
④定义子元素的次序
⑤定义子元素的数目
⑥定义元素是否为空,或者是否可包含文本
⑦定义元素和属性的数据类型
⑧定义元素和属性的默认值以及固定值
(1)定义一个ValidationEventHandle事件处理方法。
(2)创建
Xml
ReaderSettings对象的实例。
(3)将ValidationEventHandle与
Xml
ReaderSettings相关联
(4) 将
Xml
ReaderSettings的ValidationType属性设置为Va...
下面以下
使用
VS2010为平台进行演示。
1.新建一个项目,然后在项目中添加
xml
架构文件(.
xsd
结尾的文件),本示例是新建一个网站,在网站中新建项
XML
架构文件,后缀是.
xsd
,命名为
XML
Schema2.
xsd
2.平台自动生成如下内容:
其中
xml
ns在...
XML
文档的模式定义文件——
XSD
XML
Schema 的作用是定义
XML
文档的合法构建模块,类似 DTD。
XSD
是一个文本文件,独立于
XML
文档,其扩展名为.
xsd
XSD
的基本结构如下:
<?
xml
version="1.0"?>
<
xsd
:schema
xml
ns:
xsd
="http://www.w3.org/
XML
Schema">
</
xsd
:schema>
命名空间是W3C推荐的
XML
的一项标准,用于限制
XML
文档中元素的属性和命名范围
XSD
文件 (
XML
Schema 语言也称作
XML
Schema 定义(
XML
Schema Definition,
XSD
)。 具体
使用
方法和定义请参看:
http://www.w3school.com.cn/schema/index.asp
java
自jdk1.5以上新增了SchemaFactory类 可以实现对
XSD
验证
的支持,
使用
起来也很方便。
以下代码可用在JDK1.5+
Castor是一个开源框架,它能够将
XML
文档转换为
Java
对象,并且还能够将
Java
对象转换为
XML
文档。在Castor中,
XSD
(
XML
Schema Definition)是把
XML
文件的结构定义为
Java
对象的标准,它定义了
XML
文件中的元素、属性与类型等内容,就像
Java
中的类一样,每一个
XML
文件就相当于一个实例。
Castor提供了一个
XSD
2
Java
的工具,可以方便地将
XSD
文件转换为
Java
类。这个工具可以在控制台中执行,也可以写成Ant脚本来执行。
使用
Castor进行
XSD
转Bean的步骤如下:
1. 编写
XSD
文件,定义
XML
文件的元素、属性和类型等内容。
2.
使用
XSD
2
Java
工具,将
XSD
文件转换为
Java
类。
3. 创建一个Castor的UnMarshaller对象,并将
XML
文件解析为
Java
类的实例。
4.
使用
Castor的Marshaller对象,将
Java
类转换为
XML
文档。
Castor能够快速地将
XSD
文件转换为
Java
类,并且支持复杂数据类型的转换,例如
XML
Schema的simpleType和complexType。在Castor中,
Java
类的字段和
XML
文档的节点是一一对应的,因此,在
使用
Castor进行
XSD
转Bean时,需要仔细检查
XSD
文件中定义的每一个元素、属性和类型与
Java
类中的每一个字段是否一致。
总之,Castor是一个强大的
XML
处理工具,它能够方便地进行
XSD
转Bean操作,并且同时支持
Java
与
XML
之间的相互转换。