-
dom4j如何利用DTD进行Schema验证5
项目中要对接收到的xml数据进行验证,用dom4j框架,如何利用Schema对内容进行验证?说明一下我用的JDK必须是1.4的
问题补充:
哎,我就是用了没用才拿来问的呀2009年3月24日 15:46
3个答案 按时间排序 按投票排序
-
采纳的答案
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
-
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/1909072009年3月24日 22:25
相关推荐
反之,如果项目正在开发阶段,或者需要利用新版本的特性,那么尝试DOM4J 2.0.0-ALPHA可能是一个好选择。 总的来说,DOM4J是XML处理领域中的一个重要工具,无论是在简单的数据提取还是复杂的文档操作中,都能提供...
此外,DOM4J还支持XML Schema和DTD(Document Type Definition),这些都是XML文档的验证机制,确保了文档的结构正确无误。通过这些功能,开发者可以确保处理的XML数据符合预定义的规范。 在实际项目中,DOM4J常...
这篇详尽的文章将深入探讨Java API、DOM4J、Schema、XPath和DTD这五个关键的IT概念,这些都是Java开发人员日常工作中不可或缺的知识点。 首先,Java API(Application Programming Interface)是Java编程语言的核心...
学习DOM4J有助于理解XML处理的基本原理,提升XML文档操作的效率,同时在实际项目中能够更灵活地处理XML数据。无论是新手还是经验丰富的开发者,DOM4J都是值得掌握的技能之一。 **总结** DOM4J是一个高效的XML处理库...
此外,DOM4J还包含了XML Schema和DTD(Document Type Definition)的支持,可以用于验证XML文档是否符合定义的结构。这对于确保数据的准确性和一致性至关重要。 DOM4J-1.6.1.jar是DOM4J的一个版本,发布于2006年。...
此外,DOM4J还支持XML Schema和DTD(文档类型定义),可以进行XML文档的验证,确保其符合预定义的规则。这有助于保证数据的准确性和一致性。 在压缩包中的`dom4j-1.6.1`目录下,通常会包含DOM4J的源代码文件、jar...
6. **丰富的功能**:DOM4J还支持XML Schema验证、DTD处理、命名空间管理等多种功能,满足XML处理的各种需求。 **DOM4J的使用场景** - **XML解析**:DOM4J可以解析XML文件,将XML文档转换成Java对象,也可以将Java...
- XML 验证:验证 XML 是否符合指定的 DTD 或 Schema。 总结,DOM4J 是一个强大且灵活的 XML 处理工具,适用于各种需要处理 XML 的 Java 应用。通过其简洁的 API 和对 DOM、SAX、XPath 和 XSLT 的全面支持,DOM4J ...
4. **XML Schema和DTD处理**:DOM4J可以验证XML文档是否符合指定的XML Schema或者DTD,确保数据的准确性和一致性。 5. **便捷的API**:DOM4J的API设计得直观易用,使得XML编程变得更加友好,降低了学习曲线。 ...
5. **XML文档验证**:DOM4J可以与XML Schema或DTD结合,验证XML文档是否符合预定义的结构规则。 总的来说,DOM4J是一个功能丰富的XML处理库,其灵活性和效率使其成为Java开发者的首选工具之一。配合JAXB,可以...
4. **DTD和XML Schema支持**:DOM4J支持定义和验证XML文档的结构,确保文档符合规定的模式。 5. **转换为DOM对象**:DOM4J可以将XML文档转换为DOM对象,反之亦然,这为使用DOM4J和其他基于DOM的库之间的互操作提供...
5. **XML编解码**:DOM4J不仅能够解析XML,还能够生成XML文档,包括编写XML Schema、DTD(Document Type Definition)以及处理XML命名空间。 6. **性能优化**:DOM4J针对大型XML文档进行了优化,减少了内存占用,...
5. **XML文档验证**:DOM4J可以结合DTD(文档类型定义)或XSD(XML Schema)来验证XML文档的结构是否符合规范。 6. **XML编码与解码**:DOM4J提供了XML编码和解码的功能,使得XML数据可以在网络传输或存储时进行...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的读取、创建、修改和分析变得简单易行。在Java世界中,XML作为一种数据交换格式,广泛应用于配置文件、数据传输和文档存储等领域...
关于Java 5+的支持,DOM4J利用了Java 5引入的泛型,使得代码更安全,类型检查更严格。例如,`Element`类的`elements()`方法返回一个`List<Element>`,这样程序员就可以在编译时知道列表中包含的是什么类型,避免了...
DOM4J不仅提供了基本的XML操作,还支持命名空间、事件处理、DTD和XML Schema验证等功能,是Java开发中处理XML的强大工具。学习和掌握DOM4J,能够极大地提高开发效率,特别是在需要频繁处理XML数据的场景下。
- **XML验证**:检查XML文档是否符合指定的XML Schema或DTD。 总的来说,DOM4J作为Java中处理XML的重要工具,为开发人员提供了高效、灵活的解决方案。它不仅能够处理小规模的XML文件,而且在处理大规模XML时,通过...
此外,DOM4J还提供了对DTD(Document Type Definition)和XML Schema的支持,以验证XML文档的结构正确性。 DOM4J 2.0.3是更新的版本,它可能包含了更多的优化和新特性,比如对Java 8及更高版本的支持,以及性能上的...