0 0

dom4j如何利用DTD进行Schema验证5

项目中要对接收到的xml数据进行验证,用dom4j框架,如何利用Schema对内容进行验证?说明一下我用的JDK必须是1.4的
问题补充:
哎,我就是用了没用才拿来问的呀
2009年3月24日 15:46

3个答案 按时间排序 按投票排序

0 0

采纳的答案

public class XMLValidation {
    public static final int Monde_DTD = 0; // DTD形式验证

    public static final int Monde_Schema = 1; // Schema验证

    /**
     * 
     * @param xmlFile
     *            xml文件路径
     * @param validationFile
     *            校验文件路径
     * @param monde
     *            校验类型
     * @return 校验是否成功
     */
    public static boolean testXMLFile(String xmlFile, String validationFile,
            int monde) {
        boolean flag = true;
        if (monde == Monde_DTD) {// 如果是dtd校验调用校验dtd的(9php.com)方法
            flag = testXMLByDTD(xmlFile, validationFile);
        } else if (monde == Monde_Schema) {// 如果是xsd校验调用校验xsd的(9php.com)方法
            flag = testXMLByXsd(xmlFile, validationFile);
        } else {
            flag = false;
        }
        return flag;
    }

    /**
     * 校验 dtd 的(9php.com)方法
     * 
     * @param xmlFile
     *            xml文件路径
     * @param validationFile
     *            校验文件路径
     * @return 校验是否成功 此教程来源于97xxoo教程网(www.97xxoo.org)查看完整的(9php.com)教程请点:http://www.97xxoo.org/article/4/2008/20081106262.shtml
     */
    private static boolean testXMLByDTD(final String xmlFile,
            final String validationFile) {
        /*
         * 此类实体包括在 DTD 内引用的(9php.com)外部 DTD
         * 子集和外部参数实体(无论哪种情形,仅在在解析器都读取外部参数实体时)和在文档元素内引用的(9php.com)外部通用实体(如果解析器读取外部通用实体)
         */
        EntityResolver resolver = new EntityResolver() {// 应用程序解析外部实体
            public InputSource resolveEntity(String publicId, String systemId) {
                InputStream is = null;
                try {
                    is = new FileInputStream(validationFile);// 读取dtd文档
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    return null;
                }
                InputSource ins = new InputSource(is);
                ins.setPublicId(publicId);
                ins.setSystemId(systemId);
                return ins;// 返回 InputSource实例
            }
        };
        SAXReader reader = new SAXReader(true);
        reader.setEntityResolver(resolver); // 向SAX 驱动器注册一EntityResolver个实例。
        boolean flag = validate(xmlFile, reader);// 调用验证方法
        return flag;
    }

    /**
     * 验证 xsd 方法
     * 
     * @param xmlFile
     *            xml文件路径
     * @param validationFile
     *            校验文件路径
     * @return 校验是否成功
     */
    private static boolean testXMLByXsd(final String xmlFile,final String validationFile) {
        SAXReader reader = new SAXReader(true);// 创建SAXReader对象并制定需要验证
                                               // 也可通过reader.setValidation(true)来指定
        try {
            reader.setFeature("http://xml.org/sax/features/validation", true);// 设置功能标志的(9php.com)值name -功能名称,它是一个完全限定 URI。value - 请求的(9php.com)功能值(true 或false)。
            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",validationFile);// 设置属性的(9php.com)值 name - 属性名称,它是一个完全限定 URI。value - 请求的(9php.com)属性值
        } catch (SAXException e) {
            e.printStackTrace();
            return false;// 如果捕获异常 则返回false
        }
        boolean flag = validate(xmlFile, reader);// 调用验证方法
        return flag;
    }

    /**
     * 
     * @param xmlFile xml文件路径
     * @param validationFile 校验文件路径 www.97xxoo5.cn
     * @param reader  SAXReader 对象
     * @return 校验是否成功
     */
    private static boolean validate(final String xmlFile, final SAXReader reader) {
        XMLErrorHandler errorHandle = new XMLErrorHandler();// 错误处理类实例
        reader.setErrorHandler(errorHandle);// 向 XML 阅读器注册一个实例
        File file = new File(xmlFile);
        InputStream is = null;
        if (file.exists() && file.isFile()) {
            try {
                is = new FileInputStream(file);// 读取xml
                InputStreamReader in = new InputStreamReader(is, "utf-8");
                reader.read(in);
            } catch (FileNotFoundException e) {// 如果出现异常返回false
                e.printStackTrace();
                return false;
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                return false;
            } catch (DocumentException e) {
                e.printStackTrace();
                return false;
            }
        } else
            return false;
        if (errorHandle.getErrors().hasContent()) {// 如果错误处理类实例中包含错误信息返回false;
            return false;
        }
        return true;
    }
}

2009年3月27日 16:04
0 0


你用了出什么问题?

2009年3月27日 15:54
0 0

dom4j解决方案:



SAXReader reader = new SAXReader();

		reader.setValidation(true);
		try {
			reader.setFeature("http://xml.org/sax/features/validation", true);
			reader.setFeature("http://apache.org/xml/features/validation/schema", true);

			reader.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",
			                                "d:\\requestinfo.xsd");

			XMLErrorHandler errorHandler = new XMLErrorHandler();
			reader.setErrorHandler(errorHandler);

			Document document = reader.read("d:\\requestInfo.xml");
			XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
			if (errorHandler.getErrors().hasContent()) {
			        writer.write(errorHandler.getErrors());
			} else {
			        System.out.println("validate success.");
			}
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}




如实交代,这是我在javaeye上面搜索到的内容,能否兼容1.4的JDK就不清楚了.

原帖参考:http://www.iteye.com/topic/190907

2009年3月24日 22:25

相关推荐

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    反之,如果项目正在开发阶段,或者需要利用新版本的特性,那么尝试DOM4J 2.0.0-ALPHA可能是一个好选择。 总的来说,DOM4J是XML处理领域中的一个重要工具,无论是在简单的数据提取还是复杂的文档操作中,都能提供...

    dom4j1.1-1.6.1.rar

    此外,DOM4J还支持XML Schema和DTD(Document Type Definition),这些都是XML文档的验证机制,确保了文档的结构正确无误。通过这些功能,开发者可以确保处理的XML数据符合预定义的规范。 在实际项目中,DOM4J常...

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

    这篇详尽的文章将深入探讨Java API、DOM4J、Schema、XPath和DTD这五个关键的IT概念,这些都是Java开发人员日常工作中不可或缺的知识点。 首先,Java API(Application Programming Interface)是Java编程语言的核心...

    dom4j(2.1.1+ 2.0.2+ 1.6.1).zip

    学习DOM4J有助于理解XML处理的基本原理,提升XML文档操作的效率,同时在实际项目中能够更灵活地处理XML数据。无论是新手还是经验丰富的开发者,DOM4J都是值得掌握的技能之一。 **总结** DOM4J是一个高效的XML处理库...

    dom4j.jar,dom,xml,dom4j

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

    dom4j源代码,包含dom4j.jar

    此外,DOM4J还支持XML Schema和DTD(文档类型定义),可以进行XML文档的验证,确保其符合预定义的规则。这有助于保证数据的准确性和一致性。 在压缩包中的`dom4j-1.6.1`目录下,通常会包含DOM4J的源代码文件、jar...

    dom4j-1.6.1.rar(超全)

    6. **丰富的功能**:DOM4J还支持XML Schema验证、DTD处理、命名空间管理等多种功能,满足XML处理的各种需求。 **DOM4J的使用场景** - **XML解析**:DOM4J可以解析XML文件,将XML文档转换成Java对象,也可以将Java...

    dom4j使用简介

    - XML 验证:验证 XML 是否符合指定的 DTD 或 Schema。 总结,DOM4J 是一个强大且灵活的 XML 处理工具,适用于各种需要处理 XML 的 Java 应用。通过其简洁的 API 和对 DOM、SAX、XPath 和 XSLT 的全面支持,DOM4J ...

    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包和文档

    5. **XML文档验证**:DOM4J可以与XML Schema或DTD结合,验证XML文档是否符合预定义的结构规则。 总的来说,DOM4J是一个功能丰富的XML处理库,其灵活性和效率使其成为Java开发者的首选工具之一。配合JAXB,可以...

    dom4j.jar包

    4. **DTD和XML Schema支持**:DOM4J支持定义和验证XML文档的结构,确保文档符合规定的模式。 5. **转换为DOM对象**:DOM4J可以将XML文档转换为DOM对象,反之亦然,这为使用DOM4J和其他基于DOM的库之间的互操作提供...

    dom4j1.6.1

    5. **XML编解码**:DOM4J不仅能够解析XML,还能够生成XML文档,包括编写XML Schema、DTD(Document Type Definition)以及处理XML命名空间。 6. **性能优化**:DOM4J针对大型XML文档进行了优化,减少了内存占用,...

    dom4j的属性及应用

    5. **XML文档验证**:DOM4J可以结合DTD(文档类型定义)或XSD(XML Schema)来验证XML文档的结构是否符合规范。 6. **XML编码与解码**:DOM4J提供了XML编码和解码的功能,使得XML数据可以在网络传输或存储时进行...

    dom4j帮助文档

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的读取、创建、修改和分析变得简单易行。在Java世界中,XML作为一种数据交换格式,广泛应用于配置文件、数据传输和文档存储等领域...

    dom4j-2.0.2.rar 解析jar下载

    关于Java 5+的支持,DOM4J利用了Java 5引入的泛型,使得代码更安全,类型检查更严格。例如,`Element`类的`elements()`方法返回一个`List<Element>`,这样程序员就可以在编译时知道列表中包含的是什么类型,避免了...

    java中dom4j读写XML

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

    dom4j.jar,java xml

    - **XML验证**:检查XML文档是否符合指定的XML Schema或DTD。 总的来说,DOM4J作为Java中处理XML的重要工具,为开发人员提供了高效、灵活的解决方案。它不仅能够处理小规模的XML文件,而且在处理大规模XML时,通过...

    解析xml文件dom4j

    此外,DOM4J还提供了对DTD(Document Type Definition)和XML Schema的支持,以验证XML文档的结构正确性。 DOM4J 2.0.3是更新的版本,它可能包含了更多的优化和新特性,比如对Java 8及更高版本的支持,以及性能上的...

Global site tag (gtag.js) - Google Analytics