前段时间因项目需要和外部进行数据交换,采用XML为数据交换载体。这样就需要在数据交换前调用schema进行数据合法性校验,先通过XMLSpy工具制定好XSD验证文件(XMLSpy确实很方便),然后通过dom4j进行校验。废话不多说,关键代码贴下
校验器:
import java.io.IOException;
import org.dom4j.io.SAXReader;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class Validateor {
public static SAXReader reader;
private static EntityResolver aresolve;//校验器
private static Validateor validateor=Validateor.getInstance();
static{
if(aresolve==null){
aresolve=new EntityResolver(){
public InputSource resolveEntity(String arg0, String arg1)
throws SAXException, IOException {
Resource resource =new ClassPathResource("com/***/***/***/***/a.xsd");
return new InputSource(resource.getInputStream());
}
};
}
if(reader==null){
reader=new SAXReader(true);
}
try {
//符合的标准
reader.setFeature("http://apache.org/xml/features/validation/schema", true);
reader.setFeature("http://apache.org/xml/features/validation/schema-full-checking",true);
reader.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage","http://www.w3.org/2001/XMLSchema");
} catch (SAXException e1) {
System.err.println("设置校验参数错误");;
}
}
private Validateor(){
}
public static SAXReader valid(String type){
//根据不同的类型读取相应的校验文件,此处删除了一些业务代码
if("01".equals(type)) reader.setEntityResolver(aresolve);
return reader;
}
synchronized public static Validateor getInstance(){
if(validateor==null){
validateor=new Validateor();
}
return validByXsd;
}
}
校验方法
public Object validXmlData(String filePath, String type) {
InputStreamReader streamReader=null;
try {
FileInputStream in = new FileInputStream(new File(filePath));
//编码格式统一处理,支持非utf-8格式的声明文件
streamReader= new InputStreamReader(in,"UTF-8");
} catch (Exception e) {
return "读取文件出现异常:"+e.getLocalizedMessage();
}
try {
Document dateXml=Validateor.valid(type).read(streamReader);
dateXml.setXMLEncoding("UTF-8");
return dateXml;
} catch (DocumentException e) {
return "文件校验失败:"+e.getLocalizedMessage();
}
}
Schema
用XMLSpy生成,只把需要注意的命名空间贴上
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.xxx.com" targetNamespace="http://www.xxx.com" elementFormDefault="qualified">
验证的XML
<account-data
xmlns="http://www.xxx.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xxx.com a.xsd">
注意在XML的声明处: xsi:schemaLocation="http://www.xxx.com a.xsd"> 后面的a.xsd就是前面的schema名字,与前面的中间http://www.xxx.com 之间有空格。
PS:加上命名空间的XML不能直接用dom4j的selectNodes之类的API得到节点,需要对XPATH进行设置,用dom4j的elements方法比较简单些,具体API可以翻阅dom4j的文档(如无特别要求还是不加命名空间的比较简便,校验方法都是一样的,但取值比较方便)。得到节点的属性值可以用:node.valueOf("@属性名")来取得。
分享到:
相关推荐
总之,DOM4J结合XSD提供了一种高效且灵活的方式来验证XML文件的结构和内容。这对于保证数据交换的准确性和一致性具有重要意义,特别是在需要处理大量XML数据的系统中。理解和掌握这一技术,能够帮助开发者提高代码的...
5. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在...
### Java通过XML Schema校验XML #### 背景与挑战 XML(可扩展标记语言)作为一种标准的数据交换格式,在Web服务、配置文件以及其他多种应用领域有着广泛的应用。随着XML的普及,对于XML数据有效性的校验变得越来越...
6. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 7. **XML编解码**:DOM4J提供了XML编码和解码的功能,可以将Java对象序列化为XML,也可以将XML反序列化为Java对象。 8. ...
此外,DOM4J还包含了XML Schema和DTD(Document Type Definition)的支持,可以用于验证XML文档是否符合定义的结构。这对于确保数据的准确性和一致性至关重要。 DOM4J-1.6.1.jar是DOM4J的一个版本,发布于2006年。...
5. 支持XML Schema和DTD:能够验证XML文档是否符合预定义的模式或规范。 接下来,DOM4J 2.0.0-ALPHA是后续的一个实验性版本,引入了一些新特性和改进。这个版本可能包含一些未成熟的功能,但预示着DOM4J未来的发展...
2. **创建XML**:DOM4J通过Element、Attribute、Namespace等类提供了XML元素、属性和命名空间的创建和管理。你可以直接创建XML结构,或者通过读取现有XML文件并进行修改。 3. **XPath**:利用Jaxen库,DOM4J支持...
3. 功能强大:DOM4J不仅支持基本的XML解析,还提供了高级特性,如XPath表达式支持、SAX和DOM的集成、XML Schema验证、XML编写和输出等。XPath是一种强大的查询语言,能够方便地定位XML文档中的节点。 4. 扩展性:...
3. **XPath支持**:DOM4J提供了对XPath的支持,可以方便地通过表达式选取XML文档中的特定部分。 4. **文档建模**:除了基本的节点操作,DOM4J还提供了元素、属性、文本、注释、处理指令等高级功能,使得构建和操作...
DOM4J不仅在功能上超越了基本的XML文档表示,还融合了一系列高级特性,如集成的XPath支持、XML Schema验证以及用于处理大型文档或流式文档的基于事件的处理机制。 #### 功能特性详解 **1. 集成的XPath支持** DOM4...
DOM4J可以与Xerces一起工作,以提供更全面的XML处理能力,特别是当需要进行XML Schema验证时。 使用这些库文件,开发者可以轻松构建XML处理程序。例如,你可以使用DOM4J来读取XML文件,通过Jaxen执行XPath查询来...
DOM4J不仅提供了基本的XML操作,还支持命名空间、事件处理、DTD和XML Schema验证等功能,是Java开发中处理XML的强大工具。学习和掌握DOM4J,能够极大地提高开发效率,特别是在需要频繁处理XML数据的场景下。
6. **XML Schema支持**:dom4j可以处理XML Schema定义,帮助验证XML文档是否符合指定的Schema规则。 **性能优势** 相比Java标准库中的DOM和SAX解析器,dom4j在许多方面具有性能优势。例如,它的API设计更加面向...
- **XML Schema支持**:可以验证XML文档是否符合特定的XML Schema定义。 - **文档处理**:支持命名空间、DTD和XSLT转换,提供完整的XML文档处理功能。 **应用场景** - **Web服务开发**:在构建和解析SOAP消息时,...
4. **XML Schema和DTD处理**:DOM4J可以验证XML文档是否符合指定的XML Schema或者DTD,确保数据的准确性和一致性。 5. **便捷的API**:DOM4J的API设计得直观易用,使得XML编程变得更加友好,降低了学习曲线。 ...
- **XML Schema支持**:能够处理XML Schema文档,用于验证XML文档的结构和数据。 - **SAX和DOM兼容**:DOM4J可以与SAX和DOM API无缝集成,使开发者在不同解析器间切换更加方便。 - **便捷的文档操作**:提供了一整套...
DOM4J不仅限于这些基本操作,还支持XPath表达式、XML Schema验证、事件驱动的SAX解析、StAX解析以及转换为其他格式(如HTML或CSV)。通过熟练掌握DOM4J,你可以高效地处理各种XML任务,从而提高你的Java项目中的XML...
3. **XML Schema验证**: Dom4j提供API来验证XML文档是否符合特定的XML Schema定义。 4. **DOM4J与JAXB集成**: 两者结合可以方便地进行XML到Java对象的映射,以及反之。 **五、Dom4j的优势** 1. **简洁API**: Dom4...
6. **XML Schema支持**:DOM4J可以验证XML文档是否符合指定的XML Schema规范。 7. **XPath和XSLT转换**:DOM4J集成了XPath和XSLT处理,可以直接进行XML到XML的转换。 在实际应用中,`dom4j-1.6.jar`和`dom4j-1.6.1....
**DOM4J 源文件详解** DOM4J 是一个非常强大的 Java XML API,它提供了丰富的功能,使得...这个压缩包中的源代码和示例是学习和使用 DOM4J 的宝贵资源,可以帮助开发者深入理解其内部机制,并在实际项目中灵活应用。