浏览 5617 次
锁定老帖子 主题:如何使用schema对xml进行验证
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-08
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-08
jaxb2.0 validation
|
|
返回顶楼 | |
发表时间:2008-05-08
已经找到解决方案,但是digester好像不行。
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(); } } |
|
返回顶楼 | |
发表时间:2008-05-08
不知道你用是不是jdk1.5以上,如果是可以试试jdk提供的Schema,我直接拷贝项目中的代码了。
public class DefaultSchemaValidator implements SchemaValidator { private InputStream schemaStream; /** * 构造函数 * @param schemaStream schema文件输入流 */ public DefaultSchemaValidator(InputStream schemaStream) { this.schemaStream = schemaStream; } /** * 构造函数 * @param clz * @param schemaFile schema文件 */ public DefaultSchemaValidator(Class clz, String schemaFile) { this.schemaStream = clz.getResourceAsStream(schemaFile); } public DefaultSchemaValidator(ClassLoader classLoader, String schemaFile) { this.schemaStream = classLoader.getResourceAsStream(schemaFile); } public void validate(InputStream xmlStream, ErrorHandler errorHandler) throws SAXException, IOException { Schema schema = createSchema(schemaStream); Validator validator = schema.newValidator(); validator.setErrorHandler(errorHandler); validator.validate(new StreamSource(xmlStream)); } public void validate(InputStream xmlStream) throws SAXException, IOException { validate(xmlStream, new DefaultErrorHandler()); } /** * 验证给定的xml是否合法 * * @return * @throws SAXException */ protected Schema createSchema(InputStream schemaStream) throws SAXException { SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); return schemaFactory.newSchema(new StreamSource(schemaStream)); } } |
|
返回顶楼 | |