`
soft901
  • 浏览: 36830 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DOM4J使用schema验证XML文件

    博客分类:
  • XML
阅读更多
本文的jar包及版本dom4j-1.6.1.jar,jaxen-1.1-beta-6.jar,xercesImpl-2.6.2.jar

Schema文件org/soft/resource/shiporder.xsd.
<?xml version="1.0" encoding="ISO-8859-1" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">	
	<xs:element name="name" type="xs:string" />
	<xs:element name="address" type="xs:string" />
	<xs:element name="city" type="xs:string" />
	<xs:element name="country" type="xs:string" />
	<xs:element name="title" type="xs:string" />
	<xs:element name="note" type="xs:string" />
	<xs:element name="quantity" type="xs:positiveInteger" />
	<xs:element name="price" type="xs:decimal" />

	<xs:attribute name="orderid">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:pattern value="[0-9]{6}"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:attribute>

	<xs:element name="shiporder">
		<xs:complexType>

			<xs:sequence>
				<xs:element name="orderperson" type="xs:string" />

				<xs:element name="shipto">
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="name" />
							<xs:element ref="address" />
							<xs:element ref="city" />
							<xs:element ref="country" />
						</xs:sequence>
					</xs:complexType>
				</xs:element>

				<xs:element name="item" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="title" />
							<xs:element ref="note" minOccurs="0" />
							<xs:element ref="quantity" />
							<xs:element ref="price" />
						</xs:sequence>
					</xs:complexType>
				</xs:element>

			</xs:sequence>
			<xs:attribute ref="orderid" use="required" />
		</xs:complexType>
	</xs:element>
</xs:schema>


XML文件org/soft/resource/shiporder.xml.
<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder orderid="889923"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="shiporder.xsd">
	<orderperson>George Bush</orderperson>
	<shipto>
		<name>John Adams</name>
		<address>Oxford Street</address>
		<city>London</city>
		<country>UK</country>
	</shipto>
	<item>
		<title>Empire Burlesque</title>
		<note>Special Edition</note>
		<quantity>1</quantity>
		<price>10.90</price>
	</item>
	<item>
		<title>Hide your heart</title>
		<quantity>1</quantity>
		<price>9.90</price>
	</item>
</shiporder>


package org.soft.test;

import java.io.InputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class Dom4jTest {

	/** log */
	protected static final Log log = LogFactory.getLog(Dom4jTest.class);

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Dom4jTest dt = new Dom4jTest();
		try {
			Document doc = dt.read("/org/soft/resource/shiporder.xml");
			Element element = dt.getRootElement(doc);
			log.info(element.getPath());
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public Document read(String fileName) throws DocumentException,
			SAXException {
		SAXReader reader = new SAXReader(true);

		EntityResolver resolver = new EntityResolver() {
			public InputSource resolveEntity(String publicId, String systemId) {
				InputStream in = this.getClass().getResourceAsStream(
						"/org/soft/resource/shiporder.xsd");
				return new InputSource(in);
			}
		};
		reader.setEntityResolver(resolver);
		reader.setFeature("http://xml.org/sax/features/validation", true);
		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://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",
		// "shiporder.xsd");

		Document doc = reader.read(this.getClass().getResourceAsStream(fileName));

		return doc;
	}

	public Element getRootElement(Document doc) {
		return doc.getRootElement();
	}
}
分享到:
评论
3 楼 chengjf0526 2009-12-29  
我也试过,也不行!
我的程序在【 reader.setFeature("http://apache.org/xml/features/validation/schema", true);】处报异常,说没有通过验证!
2 楼 soft901 2009-04-09  
tangsy 写道

我用你的方法试过了, 似乎不行啊, org.dom4j.DocumentException: null Nested exception: null at org.dom4j.io.SAXReader.read(SAXReader.java:484) at org.dom4j.io.SAXReader.read(SAXReader.java:343) at Dom4j.Dom4jTest.read(Dom4jTest.java:61) at Dom4j.Dom4jTest.main(Dom4jTest.java:26)

log上应该是XML文件找不到.我认为.
1 楼 tangsy 2009-03-26  
我用你的方法试过了, 似乎不行啊,

org.dom4j.DocumentException: null Nested exception: null
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:343)
at Dom4j.Dom4jTest.read(Dom4jTest.java:61)
at Dom4j.Dom4jTest.main(Dom4jTest.java:26)

相关推荐

    XSD使用dom4j校验XML

    总之,DOM4J结合XSD提供了一种高效且灵活的方式来验证XML文件的结构和内容。这对于保证数据交换的准确性和一致性具有重要意义,特别是在需要处理大量XML数据的系统中。理解和掌握这一技术,能够帮助开发者提高代码的...

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    5. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在...

    dom4j dom4j dom4j dom4j

    6. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 7. **XML编解码**:DOM4J提供了XML编码和解码的功能,可以将Java对象序列化为XML,也可以将XML反序列化为Java对象。 8. ...

    dom4j解析xml文件必备jar包

    例如,你可以使用DOM4J来读取XML文件,通过Jaxen执行XPath查询来提取特定信息,然后使用DOM4J提供的方法更新XML文档内容。同时,Xerces可以确保XML文档遵循预定义的结构规则。 在实际开发中,将这些jar包添加到项目...

    dom4j.jar,dom,xml,dom4j

    此外,DOM4J还包含了XML Schema和DTD(Document Type Definition)的支持,可以用于验证XML文档是否符合定义的结构。这对于确保数据的准确性和一致性至关重要。 DOM4J-1.6.1.jar是DOM4J的一个版本,发布于2006年。...

    dom4j 2.1.1

    3. 功能强大:DOM4J不仅支持基本的XML解析,还提供了高级特性,如XPath表达式支持、SAX和DOM的集成、XML Schema验证、XML编写和输出等。XPath是一种强大的查询语言,能够方便地定位XML文档中的节点。 4. 扩展性:...

    dom4j需要的包

    4. **XML Schema验证**:DOM4J可以对XML文档进行Schema验证,确保文档符合指定的XML Schema定义,保证数据的准确性和一致性。 5. **转换XML到其他格式**:DOM4J可以将XML转换为Java对象,也可以将Java对象转换为XML...

    dom4j.jar,java xml

    DOM4J则提供了一种轻量级的替代方案,它不仅支持DOM,还引入了SAX(Simple API for XML)和StAX(Streaming API for XML)的特性,使处理大型XML文件时性能更优。 DOM4J的主要特点包括: 1. **易于使用**:DOM4J的...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    5. 支持XML Schema和DTD:能够验证XML文档是否符合预定义的模式或规范。 接下来,DOM4J 2.0.0-ALPHA是后续的一个实验性版本,引入了一些新特性和改进。这个版本可能包含一些未成熟的功能,但预示着DOM4J未来的发展...

    dom4j.jar 解析xml文件的最佳工具

    - **XML Schema验证**:DOM4J可以验证XML文档是否符合指定的XML Schema,确保数据的正确性。 在提供的压缩包中,`dom4j-full.jar`是DOM4J的完整版本,包含了所有必需的类和资源。`license.txt`文件则包含了DOM4J的...

    XML解析技术DOM4J解析

    DOM4J不仅在功能上超越了基本的XML文档表示,还融合了一系列高级特性,如集成的XPath支持、XML Schema验证以及用于处理大型文档或流式文档的基于事件的处理机制。 #### 功能特性详解 **1. 集成的XPath支持** DOM4...

    Dom4j解析XML+使用简介

    **Dom4j解析XML+使用简介** Dom4j是一个非常流行的Java库,专门用于处理XML...在提供的两个PDF文件中,"Dom4j使用简介.pdf"和"Dom4j解析XML.pdf"应该包含了更详尽的示例和教程,帮助读者进一步掌握Dom4j的使用技巧。

    dom4j使用简介

    **DOM4J使用简介** DOM4J 是一个强大的 Java 库,专为处理 XML 文档而设计。它提供了丰富的 API,使得在 Java 中解析、创建、修改 XML 文件变得简单高效。DOM4J 不仅支持 DOM(文档对象模型)和 SAX(简单API for ...

    java中dom4j读写XML

    DOM4J不仅提供了基本的XML操作,还支持命名空间、事件处理、DTD和XML Schema验证等功能,是Java开发中处理XML的强大工具。学习和掌握DOM4J,能够极大地提高开发效率,特别是在需要频繁处理XML数据的场景下。

    xml dom,sax解析,schema验证

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,广泛应用于软件开发、Web...对于初学者,理解DOM和SAX解析的原理,以及如何使用Xerces-C++进行XML Schema验证,是深入学习XML技术的关键步骤。

    dom4j.jar包,java解析xml dom4j.jar包

    - **XML Schema支持**:能够处理XML Schema文档,用于验证XML文档的结构和数据。 - **SAX和DOM兼容**:DOM4J可以与SAX和DOM API无缝集成,使开发者在不同解析器间切换更加方便。 - **便捷的文档操作**:提供了一整套...

    (帮助文档大全)javaAPI帮助文档、dom4j帮助文档、Schema帮助文档、XPath文档、DTD帮助文档.rar

    dom4jAPI帮助文档.chm提供了关于DOM4J库的详细信息,包括如何创建、解析、修改XML文档,以及如何使用XPath进行查询。DOM4J以其简单易用的API和对SAX和DOM的全面支持,成为了Java开发者处理XML数据的首选工具。 ...

    dom4j-1.6.1.jar

    6. **XML Schema支持**:dom4j可以处理XML Schema定义,帮助验证XML文档是否符合指定的Schema规则。 **性能优势** 相比Java标准库中的DOM和SAX解析器,dom4j在许多方面具有性能优势。例如,它的API设计更加面向...

    dom4j解析XML的两个JAR包(dom4j-1.6.1.jar 和 jaxen.jar)

    4. **XML Schema和DTD处理**:DOM4J可以验证XML文档是否符合指定的XML Schema或者DTD,确保数据的准确性和一致性。 5. **便捷的API**:DOM4J的API设计得直观易用,使得XML编程变得更加友好,降低了学习曲线。 ...

    dom4j进行xml文档的解析

    2. **创建Document**:解析XML文件,构建DOM4J的Document对象。这通常是通过`DocumentHelper.parseText()`或`SAXReader.read()`方法完成的。 ```java SAXReader reader = new SAXReader(); Document document = ...

Global site tag (gtag.js) - Google Analytics